home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 3 No 050 < prev    next >
Internet Message Format  |  1997-05-06  |  132KB

  1. From: pottier@clipper.ens.fr (Francois Pottier)
  2. Subject: csmp-digest-v3-050
  3. Date: Wed, 10 Aug 1994 13:16:49 +0200 (MET DST)
  4.  
  5. C.S.M.P. Digest             Wed, 10 Aug 94       Volume 3 : Issue 50
  6.  
  7. Today's Topics:
  8.  
  9.         Detecting Apple Events on launch?
  10.         Dialogs and fonts...
  11.         Filtering Edit Text items
  12.         MoreFiles 1.2 available on ftp.apple.com
  13.         Styled Text in Dialogs
  14.         The shock of the new (mac vs unix)
  15.         What does "reentrant" mean?
  16.  
  17.  
  18.  
  19. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  20. (pottier@clipper.ens.fr).
  21.  
  22. The digest is a collection of article threads from the internet newsgroup
  23. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  24. regularly and want an archive of the discussions.  If you don't know what a
  25. newsgroup is, you probably don't have access to it.  Ask your systems
  26. administrator(s) for details.  If you don't have access to news, you may
  27. still be able to post messages to the group by using a mail server like
  28. anon.penet.fi (mail help@anon.penet.fi for more information).
  29.  
  30. Each issue of the digest contains one or more sets of articles (called
  31. threads), with each set corresponding to a 'discussion' of a particular
  32. subject.  The articles are not edited; all articles included in this digest
  33. are in their original posted form (as received by our news server at
  34. nef.ens.fr).  Article threads are not added to the digest until the last
  35. article added to the thread is at least two weeks old (this is to ensure that
  36. the thread is dead before adding it to the digest).  Article threads that
  37. consist of only one message are generally not included in the digest.
  38.  
  39. The digest is officially distributed by two means, by email and ftp.
  40.  
  41. If you want to receive the digest by mail, send email to listserv@ens.fr
  42. with no subject and one of the following commands as body:
  43.     help                        Sends you a summary of commands
  44.     subscribe csmp-digest Your Name    Adds you to the mailing list
  45.     signoff csmp-digest            Removes you from the list
  46. Once you have subscribed, you will automatically receive each new
  47. issue as it is created.
  48.  
  49. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  50. Questions related to the ftp site should be directed to
  51. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  52. digest are available there.
  53.  
  54. Also, the digests are available to WAIS users.  To search back issues
  55. with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
  56. http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
  57.  
  58.  
  59. -------------------------------------------------------
  60.  
  61. >From chriss@microware.com (Chris Severtson)
  62. Subject: Detecting Apple Events on launch?
  63. Date: Wed, 20 Jul 1994 13:44:09 GMT
  64. Organization: Microware Systems Corp., Des Moines, Iowa
  65.  
  66.  
  67. I have just added support for the core apple events to a hobby
  68. application of mine and they work great!  I am concerned, however,
  69. about detecting apple events upon application launch.  When my
  70. application is launched, it creates an untitled document window, and
  71. if the application was launched because someone double-clicked one of
  72. its documents in the finder, then I do not want the application to
  73. create this untitled document.
  74.  
  75. I tried using EventAvail(highLEvelEventMask, evtPtr) before entering
  76. my main event loop to detect this, but it always tells me there are no
  77. pending high-level events.
  78.  
  79. Is there a better way to detect if you were launched because a user
  80. double-clicked one of your documents in the Finder? (I want to detect
  81. this before I enter my main event loop).
  82.  
  83.  
  84. All help is greatly appreciated,
  85.  
  86. Chris
  87. chriss@microware.com
  88.  
  89.  
  90. +++++++++++++++++++++++++++
  91.  
  92. >From jwbaxter@olympus.net (John W. Baxter)
  93. Date: Wed, 20 Jul 1994 09:35:10 -0700
  94. Organization: Internet for the Olympic Peninsula
  95.  
  96. In article <1994Jul20.134409.27760@microware.com>, chriss@microware.com
  97. (Chris Severtson) wrote:
  98.  
  99. > I have just added support for the core apple events to a hobby
  100. > application of mine and they work great!  I am concerned, however,
  101. > about detecting apple events upon application launch.  When my
  102. > application is launched, it creates an untitled document window, and
  103. > if the application was launched because someone double-clicked one of
  104. > its documents in the finder, then I do not want the application to
  105. > create this untitled document.
  106. > I tried using EventAvail(highLEvelEventMask, evtPtr) before entering
  107. > my main event loop to detect this, but it always tells me there are no
  108. > pending high-level events.
  109. > Is there a better way to detect if you were launched because a user
  110. > double-clicked one of your documents in the Finder? (I want to detect
  111. > this before I enter my main event loop).
  112.  
  113. This is pretty well spelled out in Inside Mac: Interapplication Communication.
  114.  
  115. Briefly:  if Apple events are not implemented (ie, you still support
  116. archiac pre-7 Systems), do the old thing with the application parameters.
  117.  
  118. If Apple events ARE implemented, when your program is launched just do
  119. your no-matter-what initialization.  Shortly, you will receive one of:
  120.    'aevt'/'oapp'   meaning:  your app was double-clicked on (or you should
  121. act that way)
  122.    'aevt'/'odoc'   meaning:  the user wants you to open these documents
  123.    'aevt'/'pdoc'   meaning:  the user wants you to print these documents,
  124. bugging him/her as little as possible
  125.  
  126. You'll only get one of these as the aftermath of being launched.  That's
  127. how you decide whether to open an untitled document.  [You can receive
  128. 'odoc' and 'pdoc' later, too.]
  129.  
  130. If Finder wants you to quit after printing as the result of a 'pdoc', it
  131. will send an 'aevt'/'quit' event.  It does that if your app was not
  132. running when the user asked Finder to print the document.
  133.    --John
  134.  
  135. -- 
  136. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  137.    No hablo Intel.
  138.    jwbaxter@pt.olympus.net
  139.  
  140. +++++++++++++++++++++++++++
  141.  
  142. >From jcav@kimbark.uchicago.edu (JohnC)
  143. Date: Thu, 21 Jul 1994 05:17:15 GMT
  144. Organization: The Royal Society for Putting Things on Top of Other Things
  145.  
  146. In article <1994Jul20.134409.27760@microware.com> chriss@microware.com (Chris Severtson) writes:
  147. >I have just added support for the core apple events to a hobby
  148. >application of mine and they work great!
  149.  
  150. Cool.  Did you do it by installing event handlers via the Apple Event
  151. Manager?
  152.  
  153. >I am concerned, however, about detecting apple events upon application
  154. >launch.
  155. >
  156. >Is there a better way to detect if you were launched because a user
  157. >double-clicked one of your documents in the Finder? (I want to detect
  158. >this before I enter my main event loop).
  159.  
  160. WHY do you want to do it before the main event loop?  Why not do it as Apple
  161. intended:  -Initialize (installing your Apple Event handlers)
  162.            -Start your even loop
  163.            -pass each high-level event to AEProcessAppleEvent
  164.  
  165. If the Finder launches you, you are guaranteed to get EITHER an
  166. OpenDocuments event OR an OpenApplication event, NOT both.  Your
  167. OpenApplication handler puts up an untitled window, whereas your
  168. OpenDocuments handler opens the specified document or documents but does
  169. not put up an untitled window. Your QuitApplication handler sets a flag that
  170. will cause your event loop to terminate.  Your PrintDocuments handler will
  171. print the specified document or documents.  It really is just about that
  172. simple.  There is some clear sample code in either IM-6 or
  173. IM-Interapplication Communication.
  174.  
  175.  
  176. -- 
  177.   ______     John Cavallino - B0 f++ w c+ g++ k+ s++ e h- pv
  178.   \    /     queer person              
  179.    \  /      EMail: jcav@midway.uchicago.edu
  180.     \/       It should absurdly obvious that I speak ONLY for myself.
  181.  
  182. +++++++++++++++++++++++++++
  183.  
  184. >From mathews@ns9000.furman.edu (Owen Mathews)
  185. Date: 21 Jul 1994 15:02:56 GMT
  186. Organization: furman university computing center
  187.  
  188. Chris Severtson (chriss@microware.com) wrote:
  189.  
  190. : I have just added support for the core apple events to a hobby
  191. : application of mine and they work great!  I am concerned, however,
  192. : about detecting apple events upon application launch.  When my
  193. : application is launched, it creates an untitled document window, and
  194. : if the application was launched because someone double-clicked one of
  195. : its documents in the finder, then I do not want the application to
  196. : create this untitled document.
  197.  
  198. : I tried using EventAvail(highLEvelEventMask, evtPtr) before entering
  199. : my main event loop to detect this, but it always tells me there are no
  200. : pending high-level events.
  201.  
  202. : Is there a better way to detect if you were launched because a user
  203. : double-clicked one of your documents in the Finder? (I want to detect
  204. : this before I enter my main event loop).
  205.  
  206.  
  207. : All help is greatly appreciated,
  208.  
  209. : Chris
  210. : chriss@microware.com
  211.  
  212. Actually, I think it's even simpler than that...
  213.  
  214. The system should *automatically* put an apple event in the event queue when
  215. your application is opened (see previous post); all you should need to do
  216. is go straight to your event loop.  The first event you get with
  217. WaitNextEvent() should be the AppleEvent you need to determine whether or
  218. not the user has double-clicked on a file belonging to you application.
  219. EventAvail() before your loop should also work.
  220.  
  221. IOW, what you posted above *should* work (as far as I know :) ).  The
  222. only reason I can think of why your code does not work is the flags in
  223. the SIZE resource.  Unless you make sure to set the IsHighLevelEventAware
  224. flag, the system won't send you any AppleEvents when it launches your
  225. app.  Set the flag either by making your own SIZE resource with ResEdit,
  226. or by selecting the appropriate option when building your application.
  227.  
  228. Hope this sheds a little light...   :)
  229.  
  230. --
  231.        Owen Mathews    mathews@furman.edu
  232.        <><><><><><><><><><><><><><><><><><><><>
  233.        Furman University, Computer Science Dept
  234.  
  235. +++++++++++++++++++++++++++
  236.  
  237. >From isis@netcom.com (Mike Cohen)
  238. Date: Thu, 21 Jul 1994 18:40:04 GMT
  239. Organization: ISIS International
  240.  
  241. chriss@microware.com (Chris Severtson) writes:
  242.  
  243. When you start up, *don't* create an untitled document; just do the rest of
  244. your initialization and enter your main event loop.Next, you'll receive either
  245. an 'odoc' event if a document was double-clicked or an 'oapp' if only the
  246. application was double-clicked. You should create a new document when you
  247. receive the 'oapp' event. Currently, there will only be one 'oapp' when the
  248. application is started with no documents, but in the future you may receive
  249. them when an already running application is double-clicked in the Finder.
  250.  
  251. >I have just added support for the core apple events to a hobby
  252. >application of mine and they work great!  I am concerned, however,
  253. >about detecting apple events upon application launch.  When my
  254. >application is launched, it creates an untitled document window, and
  255. >if the application was launched because someone double-clicked one of
  256. >its documents in the finder, then I do not want the application to
  257. >create this untitled document.
  258.  
  259. >I tried using EventAvail(highLEvelEventMask, evtPtr) before entering
  260. >my main event loop to detect this, but it always tells me there are no
  261. >pending high-level events.
  262.  
  263. >Is there a better way to detect if you were launched because a user
  264. >double-clicked one of your documents in the Finder? (I want to detect
  265. >this before I enter my main event loop).
  266.  
  267.  
  268. >All help is greatly appreciated,
  269.  
  270. >Chris
  271. >chriss@microware.com
  272.  
  273. -- 
  274. Mike Cohen - isis@netcom.com
  275. NewtonMail, eWorld: MikeC / ALink: D6734 / AOL: MikeC20
  276. Home Page: file://ftp.netcom.com/pub/isis/home.html
  277.  
  278. +++++++++++++++++++++++++++
  279.  
  280. >From gurgle@dnai.com (Pete Gontier)
  281. Date: 26 Jul 1994 17:30:02 GMT
  282. Organization: Integer Poet Software
  283.  
  284. In article <1994Jul21.051715.18936@midway.uchicago.edu>
  285. jcav@kimbark.uchicago.edu (JohnC) writes:
  286.  
  287. > >Is there a better way to detect if you were launched because a user
  288. > >double-clicked one of your documents in the Finder? (I want to detect
  289. > >this before I enter my main event loop).
  290. > WHY do you want to do it before the main event loop?  Why not do it as Apple
  291. > intended:  -Initialize (installing your Apple Event handlers)
  292. >            -Start your even loop
  293. >            -pass each high-level event to AEProcessAppleEvent
  294.  
  295. Because this AE handling model assumes a traditional document-oriented
  296. app. If your app is not such a thing, there may be a decent reason for
  297. you to wait and see whether you are going to get an open-application or
  298. open-documents or print-documents event. I just did it in a Eudora
  299. add-on app I'm writing. I wrote another event loop which calls
  300. WaitNextEvent with a mask which exlcudes everything but AppleEvents.
  301.  
  302. --
  303.  
  304. Pete Gontier // Integer Poet Software // gurgle@dnai.com
  305.  
  306. "Clear-cutting removes all trees... to create new habitats for
  307. wildlife. P&G uses this economically and environmentally sound method
  308. because it most closely mimics nature's own processes. Clear-cutting
  309. also opens the floor to sunshine, thus stimulating growth and providing
  310. food for animals."
  311.  
  312.     -- Procter & Gamble's "Decision Earth" free school curriculum
  313.  
  314. ---------------------------
  315.  
  316. >From Tony Andreoli <Tony_Andreoli_-_CTA@CL_C21SMTP_GW.CHINALAKE.NAVY.MIL>
  317. Subject: Dialogs and fonts...
  318. Date: Sat, 23 Jul 1994 14:00:17 GMT
  319. Organization: Naval Air Warfare Center - Weapons Division
  320.  
  321. I have a dialog that contains a series of editText and staticText fields,
  322. the problem is, I want them to be in Geneva 9!  I understand that
  323. SetDAFont will allow me to adjust the font, but how to I set the point
  324. size (as TextFont and TextSize don't work)?  Think Reference say's
  325. there's no "direct" method, but what about an indirect one?
  326.  
  327. Thanks...
  328. Tony Andreoli
  329.  
  330. +++++++++++++++++++++++++++
  331.  
  332. >From jarezina@magnus.acs.ohio-state.edu (Jasna M. Arezina-Wilson)
  333. Date: Tue, 26 Jul 1994 17:49:55 -0400
  334. Organization: Ohio State University
  335.  
  336. In article <CtEC8H.LHp@avalon.chinalake.navy.mil>, Tony Andreoli
  337. <Tony_Andreoli_-_CTA@CL_C21SMTP_GW.CHINALAKE.NAVY.MIL> wrote:
  338.  
  339. > I have a dialog that contains a series of editText and staticText fields,
  340. > the problem is, I want them to be in Geneva 9!  I understand that
  341. > SetDAFont will allow me to adjust the font, but how to I set the point
  342. > size (as TextFont and TextSize don't work)?  Think Reference say's
  343. > there's no "direct" method, but what about an indirect one?
  344.  
  345. Try this for a function (in C):
  346.  
  347. void SetDialogFontAndSize(DialogPtr theDialog, short fontNum, short
  348. fontSize)
  349. {
  350.     FontInfo    f;
  351.     
  352.     SetPort(theDialog);
  353.     
  354.     // set up the port info
  355.     TextFont(fontNum);
  356.     TextSize(fontSize);
  357.  
  358.     // now deal with the static & edit text issues
  359.     GetFontInfo(&f);
  360.     (*((DialogPeek)theDialog)->textH)->txFont = applFont;
  361.     (*((DialogPeek)theDialog)->textH)->txSize = 9;
  362.     (*((DialogPeek)theDialog)->textH)->lineHeight =
  363.                  f.ascent + f.descent + f.leading;
  364.     (*((DialogPeek)theDialog)->textH)->fontAscent = f.ascent;
  365. }
  366.  
  367.  
  368. However, this will not do it for for buttons, but it will do it for Static
  369. and Edit text fields. Anyone know how to do it for buttons without changing
  370. the system font (since this has the side effect of wrecking the menu font).
  371.  
  372.  
  373. - ----------------------------------------
  374. "...when friends rejoice both far and near
  375.  How can I keep from singing?" - Enya
  376.  
  377. +++++++++++++++++++++++++++
  378.  
  379. >From larson@oahu.cs.ucla.edu (Christopher Larson)
  380. Date: Wed, 27 Jul 94 14:50:58 GMT
  381. Organization: UCLA, Computer Science Department
  382.  
  383. In article <jarezina-260794174955@slip2-33.acs.ohio-state.edu> jarezina@magnus.acs.ohio-state.edu (Jasna M. Arezina-Wilson) writes:
  384. >In article <CtEC8H.LHp@avalon.chinalake.navy.mil>, Tony Andreoli
  385. ><Tony_Andreoli_-_CTA@CL_C21SMTP_GW.CHINALAKE.NAVY.MIL> wrote:
  386. >
  387. >> I have a dialog that contains a series of editText and staticText fields,
  388. >> the problem is, I want them to be in Geneva 9!  I understand that
  389. >> SetDAFont will allow me to adjust the font, but how to I set the point
  390. >> size (as TextFont and TextSize don't work)?  Think Reference say's
  391. >> there's no "direct" method, but what about an indirect one?
  392.  
  393. [Code Deleted...]
  394.  
  395. >However, this will not do it for for buttons, but it will do it for Static
  396. >and Edit text fields. Anyone know how to do it for buttons without changing
  397. >the system font (since this has the side effect of wrecking the menu font).
  398.  
  399. To force controls to use their window's font, simply add the constant useWFont
  400. (or something like that; refer to IM: Mac TB Essentials, "Control Manager"
  401. chapter) to the variation code of the control. No need to change the system
  402. font.
  403.  
  404. --Chris
  405. _______________________________________________________________________________
  406. Chris Larson -- Amateur Macintosh Geek, CoBase Research Assistant
  407. L.A. Institute of Slowly and Painfully Working Out the Surprisingly Obvious
  408. Death to the Trojans! Go Bruins!
  409.  
  410. (Insert disclaimer here)
  411. Internet: larson@kingston.cs.ucla.edu
  412.  
  413. +++++++++++++++++++++++++++
  414.  
  415. >From jarezina@magnus.acs.ohio-state.edu (Jasna M. Arezina-Wilson)
  416. Date: Wed, 27 Jul 1994 13:12:26 -0400
  417. Organization: Ohio State University
  418.  
  419. In article <1994Jul27.145058.17888@cs.ucla.edu>, larson@oahu.cs.ucla.edu
  420. (Christopher Larson) wrote:
  421.  
  422. > To force controls to use their window's font, simply add the constant useWFont
  423. > (or something like that; refer to IM: Mac TB Essentials, "Control Manager"
  424. > chapter) to the variation code of the control. No need to change the system
  425. > font.
  426.  
  427. Okay, how does one do that without building the DITL on the fly? I read
  428. that you can patch the GetNewControl (or NewControl, depending on what your
  429. computer is doing) and modify that as it goes by, but I haven't been able
  430. to come up with a working patching function (one that just falls-through,
  431. that is).
  432.  
  433. (BTW, IM:MTBE isn't avail to me)
  434.  
  435.  
  436. - ----------------------------------------
  437. "...when friends rejoice both far and near
  438.  How can I keep from singing?" - Enya
  439.  
  440. +++++++++++++++++++++++++++
  441.  
  442. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  443. Date: Wed, 27 Jul 1994 20:16:05 GMT
  444. Organization: Apple Computer
  445.  
  446. Jasna M. Arezina-Wilson, jarezina@magnus.acs.ohio-state.edu writes:
  447. > Okay, how does one do that without building the DITL on the fly?
  448.  
  449. You can use control items -- with associated CNTL resources -- instead of
  450. buttons. Keeping the resources in sync is a bit of a pain, but the CNTL does
  451. let you specify the variation code.
  452.  
  453. --Jens Alfke
  454.   jens_alfke@powertalk              Rebel girl, rebel girl,
  455.             .apple.com              Rebel girl you are the queen of my world
  456.  
  457. +++++++++++++++++++++++++++
  458.  
  459. >From jamesw7955@aol.com (JamesW7955)
  460. Date: 27 Jul 1994 19:49:01 -0400
  461. Organization: America Online, Inc. (1-800-827-6364)
  462.  
  463. In article <CtEC8H.LHp@avalon.chinalake.navy.mil>, Tony Andreoli
  464. <Tony_Andreoli_-_CTA@CL_C21SMTP_GW.CHINALAKE.NAVY.MIL> writes:
  465.  
  466. >> I have a dialog that contains a series of editText and staticText
  467. >>fields,
  468. >>the problem is, I want them to be in Geneva 9!  I understand that
  469. >>SetDAFont will allow me to adjust the font, but how to I set the >>point
  470. >>size (as TextFont and TextSize don't work)?  Think Reference say's
  471. >>there's no "direct" method, but what about an indirect one?
  472.  
  473. Have you looked at the 'ictb' resource? It allows you to specifiy fonts
  474. for items in a DITL (as well as colors and other goodies). It is
  475. documented in IM: Mac toolbox essentials. Beware: it is a tough resource
  476. to build and its structure may leave you scratching your head.
  477.  
  478. - James Wilson
  479. JamesW7955@aol.com
  480.  
  481. ---------------------------
  482.  
  483. >From spohn@mayo.edu (Al Spohn)
  484. Subject: Filtering Edit Text items
  485. Date: 26 Jul 1994 04:01:57 GMT
  486. Organization: Mayo Clinic
  487.  
  488. I've working on a dialog box that takes a time, e.g., 23:12:14.35 as
  489. user input.  The input is organized into four edit text boxes - hours,
  490. minutes, seconds, and hundredths.
  491.  
  492. Before I pose my question, I should let you know that I ordered the
  493. "Text" volume of Inside Macintosh - it just hasn't arrived yet.  So, if
  494. the answer to my question is in-depth and covered in that book, feel
  495. free to blow this off.  However, on the off chance that there's a
  496. relatively quick, easy answer, I'll go ahead and pose the question:
  497.  
  498. What's the best way to restrict the input of each of the text edit
  499. boxes to two digits?  I've played with a few different ideas, but I
  500. continue to be plagued by the funky scrolling that ensues when the user
  501. enters more than two digits.  I don't want to be too much of a nazi in
  502. the way I restrict the input, i.e., I'd prefer to be within sight of
  503. Apple's user interface guidelines.  If I could count on the user tabing
  504. to each field and just replacing highlighted text, things would be
  505. easy.  It's dealing with the insertion point and what happens to the
  506. text as a result that has me stumped.
  507.  
  508. Any suggestions would be appreciated!  
  509.  
  510. **********************************************************************
  511. *  Al Spohn   spohn@mayo.edu  507-284-1666 Mayo Clinic  Hilton 517A  *
  512. **********************************************************************
  513.  
  514. +++++++++++++++++++++++++++
  515.  
  516. >From dougw@astro.as.arizona.edu (Doug Williams)
  517. Date: 26 Jul 1994 14:05:45 GMT
  518. Organization: University of Arizona, Tucson, AZ
  519.  
  520. In article <3121rl$ihg@fermat.mayo.edu> spohn@mayo.edu (Al Spohn) writes:
  521. >What's the best way to restrict the input of each of the text edit
  522. >boxes to two digits?  I've played with a few different ideas, but I
  523. >Any suggestions would be appreciated!  
  524.  
  525.  
  526. Get DialogBits from ftp.apple.com.  It has working source code to
  527. handle exactly what you are asking for (limiting the number of
  528. characters in an edit box), and also show how to limit the input to
  529. only digits.  There are a few mistakes in it (< instead of <=), but
  530. they are pretty obvious.
  531.  
  532. -=-doug-=-
  533.  
  534.  
  535.  
  536. +++++++++++++++++++++++++++
  537.  
  538. >From mark_tillinghast@lamg.com (mark tillinghast)
  539. Date: 26 Jul 1994 07:53:49 -0000
  540. Organization: Los Angeles Macintosh Group BBS
  541.  
  542. Al Spohn,spohn@mayo.edu,Internet writes:
  543. >I've working on a dialog box that takes a time, e.g., 23:12:14.35 as
  544. >user input.  The input is organized into four edit text boxes - hours,
  545. >minutes, seconds, and hundredths.
  546.  
  547.  
  548. >What's the best way to restrict the input of each of the text edit
  549. >boxes to two digits?  I've played with a few different ideas, but I
  550. >continue to be plagued by the funky scrolling that ensues when the user
  551. >enters more than two digits.  I don't want to be too much of a nazi in
  552. >the way I restrict the input, i.e., I'd prefer to be within sight of
  553. >Apple's user interface guidelines.  If I could count on the user tabing
  554. >to each field and just replacing highlighted text, things would be
  555. >easy.  It's dealing with the insertion point and what happens to the
  556. >text as a result that has me stumped.
  557.  
  558.  
  559.  One way is to create a filter-proc for your dialog. That way you can
  560. conviently restrict it to two digits, error trap bad times, (ie 25.61.61.00).
  561. The filterproc essentially gives you first dibs on the Next event. 
  562.   You need somthing more than Inside Macintosh if you are going to use the C
  563. programming language. Inside Macintosh describes things in terms of the
  564. pascal programming language, and the translation to the C programming
  565. language is, in the case of the filterproc, inobvious. 
  566.   It is precisely because Inside Macintosh is in pascal that I recommend
  567. "Macintosh Programming Secrets" by Scott Knaster and Keith Rollins  2nd
  568. Edition Addison Wesley 1992. Chapter 4 of this book deals with dialogs modal
  569. and modeless.
  570.  
  571. I have done this filter proc thing before, but if you want to know what I
  572. think is a slick way to do it, take a look at the alarm clock DA.  If you
  573. make your program behave like the alarm clock DA, I think it will be easy to
  574. use. 
  575.  
  576. Have fun!
  577.  
  578.  
  579. ---------------------------
  580.  
  581. >From jumplong@aol.com (Jump Long)
  582. Subject: MoreFiles 1.2 available on ftp.apple.com
  583. Date: 27 Jul 1994 11:52:08 -0400
  584. Organization: America Online, Inc. (1-800-827-6364)
  585.  
  586. Yesterday I finished MoreFiles 1.2.  I've added lots of new code, and
  587. enhanced several of the existing routines. The change history for version
  588. 1.2 is pasted below.
  589.  
  590. MoreFile 1.2 is available now at:
  591.  
  592.     ftp.apple.com (IP address 130.43.2.3)
  593.  
  594.     /ftp/dts/mac/sc/more-files-1-2.hqx
  595.  
  596. Thanks to all of you who have reported bugs, or suggested enhancements and
  597. additions.
  598.  
  599. - Jim Luther, Apple Developer Technical Support
  600.  
  601. - --------------------------------------
  602. v1.2  07/20/94
  603.  
  604. New Routines:
  605. -  Added GetDInfo, FSpGetDInfo, SetDInfo, FSpSetDInfo, CheckVolLock,
  606. CheckObjectLock, and FSpCheckObjectLock to MoreFilesExtras.
  607. -  Added MoreDesktopMgr. In the process, I moved GetComment, SetComment,
  608. and CopyComment over from MoreFilesExtras and changed their names (added a
  609. DT).  My apologies to anyone this API change screws up. I think the new
  610. and improved code makes up for the hassles.
  611. -  Added Search. Ever want to search a volume with PBCatSearch and it
  612. isn't available? Then you'll like this code.
  613.  
  614. Enhancements to existing routines:
  615. -  Made changes for powerc.
  616. -  THINK C project is for version 7.0.3.
  617. -  Reformatted code to meet new DTS standards for sample code.
  618. -  Added code to FileCopy to open and copy only file forks that contain
  619. data. By doing this, we won't create a data or resource fork for the
  620. copied file unless it's really needed (some foreign file systems such as
  621. the ProDOS File System and Macintosh PC Exchange have to create additional
  622. disk structures to support resource forks).
  623. -  Added code to FileCopy to copy the file attributes to the destination
  624. only if the destination is an AppleShare drop box. That way, if the file
  625. has the bundle bit set and if FileCopy is modified (by you - read the
  626. comments in the source before modification) to give up time to other
  627. processes during a copy, any Finder with access to the file won't try to
  628. read bundle information from a partially copied resource fork.
  629. -  DirectoryCopy no longer calls your CopyErrProc with a copyDirCommentOp
  630. failed operation code. There's really nothing wrong with comments not
  631. getting copied and DirectoryCopy does give it its best effort.
  632. -  Modified OpenAware and OpenRFAware functions to check for locked volume
  633. if write access is requested.
  634. -  Rewrote GetObjectLocation so that it calls PBGetCatInfo fewer times
  635. (worst case is two calls). That makes the code a little harder to read,
  636. but on slow volumes (for example, AppleShare volumes over AppleTalk Remote
  637. Access), fewer calls *is* better.
  638. -  Replaced the static pcpy functions with calls to BlockMoveData (which
  639. is BlockMove if you don't have System Update 3.0, System 7.5, or later).
  640. -  The routines in MoreDesktopMgr (used to be in MoreFilesExtras) can get
  641. APPL mappings, icons, and comments from the "Desktop" file if the Desktop
  642. Manager isn't supported by a volume.
  643. -  NameFileSearch and CreatorTypeFileSearch in MoreFilesExtras now call
  644. PBCatSearchSyncCompat in Search so that they can search on all volumes.
  645. -  Tweaked all headers so that they can be read by a future "documentation
  646. viewer" project.
  647.  
  648. Bugs fixed:
  649. -  Changed DTCopyComment to use Str255 instead of unsigned char
  650. commentBuffer[199]. PhotoCD's wrongly return up to 255 characters instead
  651. of 200 characters and that was trashing memory.
  652. -  Changed FSMakeFSSpecCompat to fix Macintosh PC Exchange 1.0.x bug.
  653. -  Fixed a couple of bugs in GetFilenameFromPathname.
  654. -  Fixed ChangeFDFlags and ChangeCreatorType to get the real vRefNum
  655. before calling BumpDate. BumpDate was "bumping" the wrong object in some
  656. cases.
  657. -  Fixed GetParentID so that it gets the right parent ID in all cases (HFS
  658. has a weird bug that I work around).
  659. -  Cleared ioFVersNum field for all PBHOpenDF, PBHOpenRF, PBHOpen,
  660. PBHCreate, PBHDelete, PBHGetFInfo, PBHSetFInfo, PBHSetFLock, PBHRstFLock,
  661. and PBHRename calls. Not needed for HFS volumes, but some of those old MFS
  662. volumes might still be around.
  663. -  Changed the macro name hasLocalList to hasLocalWList to match bit name
  664. in Files.h.
  665.  
  666. end.
  667.  
  668. ---------------------------
  669.  
  670. >From jcr@mbunix.mitre.org (Rogers)
  671. Subject: Styled Text in Dialogs
  672. Date: 25 Jul 1994 21:44:07 GMT
  673. Organization: The MITRE Corporation, Bedford, MA
  674.  
  675. Can anyone tell me how to change the font, size, and style of
  676. the text for dialog items, including buttons?
  677.  
  678. Thanks,
  679.          Jeff Rogers
  680.          The MITRE Corp.
  681.  
  682.  
  683. +++++++++++++++++++++++++++
  684.  
  685. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  686. Date: Tue, 26 Jul 1994 20:27:41 GMT
  687. Organization: Apple Computer
  688.  
  689. Rogers, jcr@mbunix.mitre.org writes:
  690. > Can anyone tell me how to change the font, size, and style of
  691. > the text for dialog items, including buttons?
  692.  
  693. You can change the text style of static and edit-text items by changing the
  694. style of the grafPort (via TextFont, TextSize, TextFace). You also need to
  695. update the txFont, txSize, txFace fields of the dialog's TE record, then call
  696. TECalText. Don't forget to SetPort to the dialog first. It looks better if
  697. you turn off the isVisible flag in the DLOG resource, then manually call
  698. ShowWindow after making your changes.
  699.  
  700. Changing the style of buttons is harder. If you create the button yourself
  701. using NewControl, you can OR the variation code with 8 (useWFont) which will
  702. make the title of the button appear in the grafPort's current font.
  703. Unfortunately control items in dialogs are created for you by the dlog mgr
  704. and there is no way to change their var code once created.
  705. The two ways I know of to get around this are:
  706. (A) make all your buttons be control items, not buttons, then set the
  707. variation code in the CNTL resource
  708. (B) Temporarily patch out GetNewControl during the call to GetNewDialog. In
  709. the patch, OR the varCode with useWFont and call through to the old trap.
  710. (This is what I do in Stickies and it works great.)
  711.  
  712. --Jens Alfke
  713.   jens_alfke@powertalk              Rebel girl, rebel girl,
  714.             .apple.com              Rebel girl you are the queen of my world
  715.  
  716. +++++++++++++++++++++++++++
  717.  
  718. >From jarezina@magnus.acs.ohio-state.edu (Jasna M. Arezina-Wilson)
  719. Date: 27 Jul 1994 11:14:49 GMT
  720. Organization: Ohio State University
  721.  
  722. In article <1994Jul26.202741.20971@gallant.apple.com>, Jens Alfke
  723. <jens_alfke@powertalk.apple.com> wrote:
  724.  
  725.  
  726. > (B) Temporarily patch out GetNewControl during the call to GetNewDialog. In
  727. > the patch, OR the varCode with useWFont and call through to the old trap.
  728. > (This is what I do in Stickies and it works great.)
  729.  
  730. Are you this this is right? I tried it, and GetNewControl is not called -
  731. NewControl is. (at least on my SE & sys7.0) Could you post your code
  732. fragment here or to alt.sources.mac?
  733.  
  734. - ----------------------------------------
  735. "...when friends rejoice both far and near
  736.  How can I keep from singing?" - Enya
  737.  
  738. +++++++++++++++++++++++++++
  739.  
  740. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  741. Date: Wed, 27 Jul 1994 20:08:54 GMT
  742. Organization: Apple Computer
  743.  
  744. Jasna M. Arezina-Wilson, jarezina@magnus.acs.ohio-state.edu writes:
  745. > Are you this this is right? I tried it, and GetNewControl is not called -
  746. > NewControl is. (at least on my SE & sys7.0)
  747.  
  748. Oops, you're right. It's NewControl you need to patch.
  749.  
  750. > Could you post your code
  751. > fragment here or to alt.sources.mac?
  752.  
  753. Unfortunately the code I have that does this is part of Stickies, and Apple
  754. wouldn't want me to redistribute the source. I should probably snip out just
  755. the essentials and give them to DTS as an official Snippet...
  756.  
  757. --Jens Alfke
  758.   jens_alfke@powertalk              Rebel girl, rebel girl,
  759.             .apple.com              Rebel girl you are the queen of my world
  760.  
  761. ---------------------------
  762.  
  763. >From quasar@ctt.bellcore.com (Laurence R. Brothers)
  764. Subject: The shock of the new (mac vs unix)
  765. Date: Thu, 21 Jul 1994 17:27:17 GMT
  766. Organization: Bellcore
  767.  
  768.  
  769. I don't intend to start a flame war about relative merits of things
  770. with this article, but I must say that as a programmer familiar with a
  771. variety of unix gui toolkits, ranging (historically) from Sunview all
  772. the way through TCL/TK, that my introduction to the Mac environment
  773. was rather a shock.
  774.  
  775. Keep in mind I'm used to an environment where you just don't have to
  776. worry about managing and dispatching your own events, and even
  777. updating windows will often be magically taken care of for you.  Most
  778. unix GUI toolkit objects either have useable default behavior, or you
  779. simply register callbacks for them. You never have to mess with the
  780. event loop in a typical X application unless you're doing something
  781. really weird and/or low-level. In fact if you use TCL/TK (that's a
  782. different TCL than the Mac acronym, by the way), almost every little
  783. thing is taken care of with amazingly acceptable default behaviour in
  784. the toolkit library.
  785.  
  786. A list of amazements as I started trying to develop some simple test
  787. applications to learn the Mac development environment:
  788.  
  789. * What, I have to write my own event loop? Haven't they heard of
  790. callbacks?  Interposition? Well, I guess it's not a pre-emptive OS,
  791. but still, does that make any difference?
  792.  
  793. * I have to manage operating system events myself? What's the point of
  794. having an operating system if it can't manage its own events?
  795.  
  796. * I have to write an event procedure in case someone inserts an
  797. unformatted disk? Give me a break. How about I request a notification
  798. only if I'm interested in a bad disk event, and otherwise you take
  799. care of it, Mr. Disk Manager? No deal? Too bad.
  800.  
  801. * OK, first I see the event is in the menu bar, then I adjust the
  802. menus to show what is active, then I call the menu tracking procedure,
  803. then I divide a long int into two "words" (gee, 16 bit words, I wonder
  804. where that came from -- me, I call it a half-word.... :-), then I find
  805. out which menu and item it was, then I get to actually have my own
  806. code do something after checking the global state of the program.  How
  807. baroque.
  808.  
  809. * Wait a minute, this isn't a scrollbar, it's just a bit of graphics.
  810. It doesn't actually *do* anything. It takes a page of code just to get
  811. to the point that you find out which scrollbar thingie got clicked on,
  812. then you have to do it all yourself. Apple wouldn't have to have all
  813. this style guide stuff if they actually implemented any functionality
  814. anywhere.
  815.  
  816. * Hmm... I guess the zoom box and the grow icon don't do anything
  817. either. Well, gee, at least I have system zoom and grow procedures,
  818. but my event procedure needs at least a page of checks surrounding
  819. each one before I can call it. Same thing for window movement.
  820.  
  821. * Hey wait a second, you mean I actually have to activate and
  822. deactivate the windows myself? I have to deselect the controls, and
  823. all that? Oh come on....
  824.  
  825. * I guess geometry management is too much to ask for? Oh well. Should
  826. have known better than to ask. Of course there are no subwindows on
  827. the Mac anyhow, so I guess there's not much point.
  828.  
  829. * Oh well, at least the update event is the same. What, you say I
  830. shouldn't use backing store? Why not? Why provide the feature and then
  831. say not to use it?
  832.  
  833.                 ...
  834.  
  835.  
  836. Well, you can see what I mean, if you have any familiarity with your
  837. typical Unix/X toolkit (which I had previously thought of as the
  838. pessimal programming environment!)
  839.  
  840. I have to qualify all this by saying I've only been messing around
  841. with Mac programming for a few weeks, so I am not used to it all yet,
  842. but still.... I would have thought the basic programming paradigm
  843. might have advanced slightly in the last 10 years, at least to the
  844. extent of a standard re-entrant toolkit event-loop with callbacks and
  845. event interposition instead of all this manual dispatching. Even in an
  846. antique like Sunview you could code a typical application in probably
  847. 1/5 to 1/2 the space of an equivalent Mac application. 
  848.  
  849. It must take at least 500 lines of C to produce a Mac application that
  850. is minimally conformant to the general rules of application behavior,
  851. probably more. IMHO, even a 3 line hello world program should
  852. automagically do all "the right things" because the windowing
  853. environment/finder/OS/whatever should take care of it all.
  854.  
  855. I also must admit that I have only been using MPW C, not MacApp or any
  856. of the C++ stuff as yet. I imagine that every Mac programmer must use
  857. some standard application framework to build their programs after a
  858. while, be it MacApp, AppWannaBe, or whatever, but still, the whole
  859. thing seems a lot more awkward than it really needs to be.
  860.  
  861. Of course all the above is IMHO only.... Of course there are many
  862. things available on the Mac platform that are either real expensive or
  863. very hard to implement in the typical unix environment. Still, I would
  864. really like someone to tell me: "You obviously haven't used the foo
  865. class libraries with the bar uims package and the baz event manager
  866. yet, so what do you expect".
  867. --
  868.              Laurence R. Brothers (quasar@bellcore.com)
  869.   Bellcore -- Computing Technology Integration -- Knowledge-Based Applications
  870.        "There is no memory with less satisfaction in it than the memory
  871.             of some temptation we resisted." -- James Branch Cabell
  872.  
  873.  
  874. +++++++++++++++++++++++++++
  875.  
  876. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  877. Date: Thu, 21 Jul 1994 20:57:20 GMT
  878. Organization: Apple Computer
  879.  
  880. Laurence R. Brothers, quasar@ctt.bellcore.com writes:
  881. > Keep in mind I'm used to an environment where you just don't have to
  882. > worry about managing and dispatching your own events, and even
  883. > updating windows will often be magically taken care of for you.  Most
  884. > unix GUI toolkit objects either have useable default behavior, or you
  885. > simply register callbacks for them. You never have to mess with the
  886. > event loop in a typical X application unless you're doing something
  887. > really weird and/or low-level. In fact if you use TCL/TK (that's a
  888. > different TCL than the Mac acronym, by the way), almost every little
  889. > thing is taken care of with amazingly acceptable default behaviour in
  890. > the toolkit library.
  891.  
  892. You really need to start using one of the frameworks -- MacApp, TCL or
  893. PowerPlant. They implement most of the nice things you describe above.
  894.  
  895. Keep in mind the historical legacy of the Mac: that it was built in the
  896. early-'80s on a slow CPU with 128k of RAM (and originally it was only
  897. supposed to have 64k.) There wasn't enough RAM or oomph to use object
  898. oriented languages, and C++ didn't exist anyway. Nor was there enough memory,
  899. or development time, to provide sophisticated libraries to do the work for
  900. you. The goal of the Toolbox was to provide the facilities you'd need to put
  901. together a Mac-style application, not to make it as easy as possible.
  902.  
  903. Unfortunately, it's never been possible to move away from that, since it
  904. would have meant breaking every existing application. What _has_ been done is
  905. to layer more sophisticated environments on top of the Toolbox, such as the
  906. class libraries I mentioned above. I think you'll find those much more to
  907. your taste.
  908.  
  909. --Jens Alfke
  910.   jens_alfke@powertalk              Rebel girl, rebel girl,
  911.             .apple.com              Rebel girl you are the queen of my world
  912.  
  913. +++++++++++++++++++++++++++
  914.  
  915. >From todd@fred.dfrf.nasa.gov (Todd Vernon)
  916. Date: Thu, 21 Jul 1994 21:14:01 GMT
  917. Organization: NASA
  918.  
  919. --
  920. > I don't intend to start a flame war about relative merits of things
  921. > with this article, but I must say that as a programmer familiar with a
  922. > variety of unix gui toolkits, ranging (historically) from Sunview all
  923. > the way through TCL/TK, that my introduction to the Mac environment
  924. > was rather a shock.
  925.  
  926. Hold on there sport.  I come from the same direction as
  927. you but I have a little different perspective.
  928.  
  929. First of all.  You are comparing the Mac Toolbox to a 
  930. high level lib like Motif or TCL/TK ?  Try XLib.
  931.  
  932. Xlib is only moderatly better in a side by side comparison
  933. then the MacToolbox.  Think of the Mac Toolbox as Xlib with
  934. controls.  And yes they really are controls, you didn't have
  935. to "draw" the button did you ? 
  936.  
  937. If you choose to use the toolbox alone that is your biz, but I
  938. would suggest something a little better, at least initially.
  939. I use TranSkel and think it is really quite nice, and yes it
  940. has the callbacks that are familiar to you.  
  941.  
  942. Pay a little respect to the Mac roots, it was the first wide
  943. spread use of GUI stuff.  It carries a little baggage.
  944.  
  945. As for MPW, well you made that choice, nothing can help you
  946. there.  (try Code Warrior).
  947.  
  948.  
  949.  
  950. - ----------------------------------------------------------
  951.   Todd Vernon                                    |\/\/\/|
  952.   PRC Inc.                                       |      |
  953.   NASA Dryden Flight Research Facility           |      |
  954.   Edwards, CA 93523                              | (o)(o)
  955.                                                  @      _)
  956.                                                   | ,___|
  957.   Phone: 805 258 2106                             |   /
  958.   FAX  : 805 258 2792                            /____\
  959.   Email: todd@fred.dfrf.nasa.gov                /      \
  960. - ----------------------------------------------------------
  961.  
  962. +++++++++++++++++++++++++++
  963.  
  964. >From rmah@panix.com (Robert Mah)
  965. Date: Thu, 21 Jul 1994 17:29:43 -0500
  966. Organization: One Step Beyond
  967.  
  968. quasar@ctt.bellcore.com (Laurence R. Brothers) wrote:
  969.  
  970. ) I don't intend to start a flame war about relative merits of things
  971. ) with this article, but I must say that as a programmer familiar with a
  972. ) variety of unix gui toolkits, ranging (historically) from Sunview all
  973. ) the way through TCL/TK, that my introduction to the Mac environment
  974. ) was rather a shock.
  975. ) [...]
  976. ) It must take at least 500 lines of C to produce a Mac application that
  977. ) is minimally conformant to the general rules of application behavior,
  978. ) [...]
  979. ) I also must admit that I have only been using MPW C, not MacApp or any
  980. ) of the C++ stuff as yet. I imagine that every Mac programmer must use
  981. ) some standard application framework to build their programs after a
  982. ) while, be it MacApp, AppWannaBe, or whatever, but still, the whole
  983. ) thing seems a lot more awkward than it really needs to be.
  984.  
  985. Gack.  You're using the most primative (interface wise) programming
  986. environment and language on the Mac and programming to the metal (well 
  987. the raw OS anyway) and compare that against sophisticated X toolkits
  988. for UNIX????
  989.  
  990. As you implied, if you should compare your X experience vs MacApp or TCL 
  991. or PowerPlant or Galaxy or XVT or...
  992.  
  993. If you weren't the kind of guy who did raw X programming, why do you
  994. want to do raw Mac programming?  There are plenty of higher level tools
  995. to choose from.  Go choose one.  Or build one, as it seems you are in
  996. the process of doing :-).
  997.  
  998. In addition, remember that the Mac is a _personal_ computer, not a work-
  999. station.  As such, it generally runs with much slimmer resources than
  1000. workstations.  32MB's of RAM is not common.  Only around 65% of Mac users
  1001. even have color.  Hell, a good 20% or 30% still use System 6 on 2MB or 
  1002. less.
  1003.  
  1004. P.S. I would put the minimal LOC in C at a few thousand for a useless,
  1005.      but fully conformant Mac application.
  1006.  
  1007.  
  1008. That said, just for kicks, I'll try to explain some of the reasons the 
  1009. Mac is the way it is.
  1010.  
  1011. ) * What, I have to write my own event loop? Haven't they heard of
  1012. ) callbacks?  Interposition? Well, I guess it's not a pre-emptive OS,
  1013.  
  1014. The original Mac was designed in '82/83 and was a single tasking machine.
  1015. When it came out, it had the most sophisticated and rich API of any
  1016. machine of its class available at the time.
  1017.  
  1018. In addition, in a cooperative environment, IMO, you need fine control
  1019. over event handling to be nice-nice with other apps.
  1020.  
  1021.  
  1022. ) * I have to manage operating system events myself? What's the point of
  1023. ) having an operating system if it can't manage its own events?
  1024.  
  1025. It does.  It simply notifies you when things happen.  Would you rather
  1026. it didn't?
  1027.  
  1028.  
  1029. ) * OK, first I see the event is in the menu bar, then I adjust the
  1030. ) menus to show what is active, then I call the menu tracking procedure,
  1031. ) [...]
  1032. ) something after checking the global state of the program.  How baroque.
  1033.  
  1034. If you only want simple menu selections, yes.  Some folks have to do more
  1035. complex things like tear-off menus that turn into floating palettes.
  1036.  
  1037. Same with scroll bars and other interface elements.
  1038.  
  1039.  
  1040. ) * Oh well, at least the update event is the same. What, you say I
  1041. ) shouldn't use backing store? Why not? Why provide the feature and then
  1042. ) say not to use it?
  1043.  
  1044. The PicHandle thing for windows IS NOT a backing store.  You shouldn't 
  1045. use a backing store because the average Mac today has only 4MB to 8MB
  1046. of real RAM.  That's not enough for backing stores.  The original had
  1047. only 128K of RAM.
  1048.  
  1049.  
  1050. ) but still.... I would have thought the basic programming paradigm
  1051. ) might have advanced slightly in the last 10 years, at least to the
  1052. ) [...]
  1053.  
  1054. Nope.  There's this little thing called backward compatability that's
  1055. extremely important in the personal computer world.  UNIX people are
  1056. generally technical enough to roll with the punches, but secretaries,
  1057. artists and office workers would balk.
  1058.  
  1059. Apple is, of course, working on a pre-emptive kernal and memory protection
  1060. and all that other stuff.  But we gotta wait.  When they do come, the
  1061. days of free-form hacking and wild system patches will be gone.  Maybe
  1062. that's good, maybe that's bad...to each his own.
  1063.  
  1064. Well, that's enough for now.
  1065.  
  1066. Cheers,
  1067. Rob
  1068. _____________________________________________________________________
  1069. Robert S. Mah           Software Development          +1.212.947.6507
  1070. One Step Beyond        and Network Consulting          rmah@panix.com
  1071.  
  1072. +++++++++++++++++++++++++++
  1073.  
  1074. >From afcjlloyd@aol.com (AFC JLloyd)
  1075. Date: 21 Jul 1994 17:32:05 -0400
  1076. Organization: America Online, Inc. (1-800-827-6364)
  1077.  
  1078. In article <QUASAR.94Jul21132717@shadowgard.ctt.bellcore.com>,
  1079. quasar@ctt.bellcore.com (Laurence R. Brothers) writes:
  1080.  
  1081. >I don't intend to start a flame war about relative merits of things
  1082. >with this article, but I must say that as a programmer familiar with a
  1083. >variety of unix gui toolkits, ranging (historically) from Sunview all
  1084. >the way through TCL/TK, that my introduction to the Mac environment
  1085. >was rather a shock.
  1086. >
  1087. > [ some interesting stuff omitted]
  1088. >
  1089. >I also must admit that I have only been using MPW C, not MacApp or any
  1090. >of the C++ stuff as yet. I imagine that every Mac programmer must use
  1091. >some standard application framework to build their programs after a
  1092. >while, be it MacApp, AppWannaBe, or whatever, but still, the whole
  1093. >thing seems a lot more awkward than it really needs to be.
  1094. >
  1095. >Of course all the above is IMHO only.... Of course there are many
  1096. >things available on the Mac platform that are either real expensive or
  1097. >very hard to implement in the typical unix environment. Still, I would
  1098. >really like someone to tell me: "You obviously haven't used the foo
  1099. >class libraries with the bar uims package and the baz event manager
  1100. >yet, so what do you expect".
  1101.  
  1102. Yes, you've got it right, even down to your suspicion that application
  1103. framework libraries like MacApp are what you are missing.  At one time
  1104. Apple hinted that a framework like MacApp might make it into ROM, but that
  1105. idea seems to have been abandoned, which in my opinion is just as well.  I
  1106. worked on Bedrock for two years, which was to be a next generation
  1107. framework (and may still become one in its reincarnation as the OpenDoc
  1108. Parts Framework).  My experiences tell me that we still have more to learn
  1109. about the right way to create application frameworks; putting one into ROM
  1110. at this point seems like a bad idea.
  1111.  
  1112. All of the established frameworks address many of the points you raise,
  1113. but none are without flaws.  So, you should survey the established
  1114. frameworks, pick one, and then be prepared to enter a love/hate
  1115. relationship with it.
  1116.  
  1117. Jim Lloyd
  1118. afcjlloyd@aol.com
  1119.  
  1120.  
  1121. +++++++++++++++++++++++++++
  1122.  
  1123. >From Bill North <north@spso.gsfc.nasa.gov>
  1124. Date: 21 Jul 1994 22:36:35 GMT
  1125. Organization: NASA Goddard Space Flight Center -- InterNetNews site
  1126.  
  1127. In article <QUASAR.94Jul21132717@shadowgard.ctt.bellcore.com>
  1128. Laurence R. Brothers, quasar@ctt.bellcore.com writes:
  1129. >
  1130. >A list of amazements as I started trying to develop some simple test
  1131. >applications to learn the Mac development environment:
  1132. >
  1133.  
  1134. Clearly, what you really want is to work on the Apple IIgs. :)
  1135. Much more advanced than the Mac. ;-)
  1136.  
  1137. Most of those things exist in the Apple IIgs toolbox. I never
  1138. understood why Apple never added the equivalent of IIgs calls
  1139. to the Mac, when the same company developed both toolboxes.
  1140.  
  1141. Why can't Apple add TaskMaster to the Mac? (TaskMaster handles
  1142. all "typical" system events: Window moving, scrolling, resizing,
  1143. etc; Menu selecting, highlighting, blinking, etc; Desk accessory
  1144. handling; Control activation, highlighting, etc.)
  1145.  
  1146. How about "HandleDiskInsert" on the IIgs, which will handle all
  1147. disk insert activities, including formatting.
  1148.  
  1149. Could go on, but...
  1150.  
  1151. Apple should apply the lessons learned from the IIgs and apply
  1152. them to the Mac.
  1153.  
  1154. /*  Bill North -- north@spso.gsfc.nasa.gov  */
  1155.  
  1156. +++++++++++++++++++++++++++
  1157.  
  1158. >From stuart@lorelei.ece.drexel.edu (Stuart R. Harper)
  1159. Date: Thu, 21 Jul 1994 18:52:34 -0400
  1160. Organization: Drexel U.
  1161.  
  1162. In article <1994Jul21.205720.2022@gallant.apple.com>, Jens Alfke
  1163. <jens_alfke@powertalk.apple.com> wrote:
  1164.  
  1165. > Laurence R. Brothers, quasar@ctt.bellcore.com writes:
  1166. > > Keep in mind I'm used to an environment where you just don't have to
  1167. > > worry about managing and dispatching your own events, and even
  1168. > > updating windows will often be magically taken care of for you.  Most
  1169. > > unix GUI toolkit objects either have useable default behavior, or you
  1170. > > simply register callbacks for them. You never have to mess with the
  1171. > > event loop in a typical X application unless you're doing something
  1172. > > really weird and/or low-level. In fact if you use TCL/TK (that's a
  1173. > > different TCL than the Mac acronym, by the way), almost every little
  1174. > > thing is taken care of with amazingly acceptable default behaviour in
  1175. > > the toolkit library.
  1176. > You really need to start using one of the frameworks -- MacApp, TCL or
  1177. > PowerPlant. They implement most of the nice things you describe above.
  1178. > Keep in mind the historical legacy of the Mac: that it was built in the
  1179. > early-'80s on a slow CPU with 128k of RAM (and originally it was only
  1180. > supposed to have 64k.) There wasn't enough RAM or oomph to use object
  1181. > oriented languages, and C++ didn't exist anyway. Nor was there enough memory,
  1182. > or development time, to provide sophisticated libraries to do the work for
  1183. > you. The goal of the Toolbox was to provide the facilities you'd need to put
  1184. > together a Mac-style application, not to make it as easy as possible.
  1185.  
  1186. That was an EXTREME cop-out. Reading Mr. Brothers list of complaints
  1187. reminded me of my own annoyance with programming the mac after moving over
  1188. from the Amiga, a 256K RAM/ROM, 68K based system. At the time of my change
  1189. ('90), I couldn't believe that Apple provided an impressive guideline on
  1190. 'how' the Mac should look and function without providing default actions
  1191. from system required user-interface features. Window management and
  1192. user-input code that took 3 or 4 lines to control suddenly took pages.
  1193.  
  1194. Requiring the development environment to push basic features invites all
  1195. kinds of compatibilty problems between systems, increases development time
  1196. with wasted compilation of 'standard' actions and increases the overall
  1197. code 'bloat'. Add that to the normal OOPS bloat and you've created
  1198. multi-megabyte monsters that require '040s and 601 just to grow the
  1199. window. :)
  1200.  
  1201. -- 
  1202. Stuart R. Harper - E4 Lab Technician - LeBow 132 - CCD - Drexel U.
  1203. stuart@lorelei.ece.drexel.edu        harper@e4mail.ece.drexel.edu
  1204.  
  1205. +++++++++++++++++++++++++++
  1206.  
  1207. >From aclaasse@nyx.cs.du.edu (Arne Claassen)
  1208. Date: 21 Jul 1994 20:16:47 -0600
  1209. Organization: /usr/lib/news/organi[sz]ation
  1210.  
  1211. In article <1994Jul21.205720.2022@gallant.apple.com>,
  1212. Jens Alfke  <jens_alfke@powertalk.apple.com> wrote:
  1213. >You really need to start using one of the frameworks -- MacApp, TCL or
  1214. >PowerPlant. They implement most of the nice things you describe above.
  1215. >
  1216.  
  1217. Being a Newbie to CodeWarrior and Macintosh C programming i felt a lot like
  1218. Lawrence. I looked at Powerplant and then decided to dig into the user manual
  1219. which explained to me that if i didn't have a good working knowledge of
  1220. the Toolbox and other such things, i should not bother with Powerplant yet.
  1221. So i'm going through Macintosh C primer and anything i can find and find myself
  1222. programming Event loops and stuff like that and never even getting to an 
  1223. actual program aside from handling the basic interface. 
  1224.  
  1225. I'm looking for something that let's me design the interface in a manner
  1226. similar to Visual C or similar and be able to concentrate on writing the code
  1227. that operates within the interface framework. Is this what Powerplant (or
  1228. MacApp, or whatever) does and how do i get started with it?
  1229.  
  1230. Thanks,
  1231.  
  1232. Arne F. Claassen
  1233. claassen@ebs330.eb.uah.edu
  1234. aclaasse@nyx.cs.du.edu
  1235.  
  1236.  
  1237. +++++++++++++++++++++++++++
  1238.  
  1239. >From thundero@news.delphi.com (THUNDERONE@DELPHI.COM)
  1240. Date: 22 Jul 1994 03:32:51 -0000
  1241. Organization: Delphi Internet Services Corporation
  1242.  
  1243. quasar@ctt.bellcore.com (Laurence R. Brothers) writes:
  1244.  
  1245.  
  1246. >I don't intend to start a flame war about relative merits of things
  1247. >with this article, but I must say that as a programmer familiar with a
  1248. >variety of unix gui toolkits, ranging (historically) from Sunview all
  1249. >the way through TCL/TK, that my introduction to the Mac environment
  1250. >was rather a shock.
  1251.  
  1252. >Keep in mind I'm used to an environment where you just don't have to
  1253. >worry about managing and dispatching your own events, and even
  1254. >updating windows will often be magically taken care of for you.  Most
  1255. >unix GUI toolkit objects either have useable default behavior, or you
  1256. >simply register callbacks for them. You never have to mess with the
  1257. >event loop in a typical X application unless you're doing something
  1258. >really weird and/or low-level. In fact if you use TCL/TK (that's a
  1259. >different TCL than the Mac acronym, by the way), almost every little
  1260. >thing is taken care of with amazingly acceptable default behaviour in
  1261. >the toolkit library.
  1262.  
  1263. John Ousterhout's new group at Sun is apparently working on a Mac 
  1264. port of Tk.  There's already an "unofficial" port of Tcl.
  1265.  
  1266. >A list of amazements as I started trying to develop some simple test
  1267. >applications to learn the Mac development environment:
  1268.  
  1269. >* What, I have to write my own event loop? Haven't they heard of
  1270. >callbacks?  Interposition? Well, I guess it's not a pre-emptive OS,
  1271. >but still, does that make any difference?
  1272.  
  1273. You're trying not to start a flame war?  "I ask merely for 
  1274. information."
  1275.  
  1276. >* I have to manage operating system events myself? What's the point of
  1277. >having an operating system if it can't manage its own events?
  1278.  
  1279. Hey, go check out Windows before you complain about Macintosh's 
  1280. handling of events.
  1281.  
  1282. >* I have to write an event procedure in case someone inserts an
  1283. >unformatted disk? Give me a break. How about I request a notification
  1284. >only if I'm interested in a bad disk event, and otherwise you take
  1285. >care of it, Mr. Disk Manager? No deal? Too bad.
  1286.  
  1287. >* OK, first I see the event is in the menu bar, then I adjust the
  1288. >menus to show what is active, then I call the menu tracking procedure,
  1289. >then I divide a long int into two "words" (gee, 16 bit words, I wonder
  1290. >where that came from -- me, I call it a half-word.... :-), then I find
  1291. >out which menu and item it was, then I get to actually have my own
  1292. >code do something after checking the global state of the program.  How
  1293. >baroque.
  1294.  
  1295. >* Wait a minute, this isn't a scrollbar, it's just a bit of graphics.
  1296. >It doesn't actually *do* anything. It takes a page of code just to get
  1297. >to the point that you find out which scrollbar thingie got clicked on,
  1298. >then you have to do it all yourself. Apple wouldn't have to have all
  1299. >this style guide stuff if they actually implemented any functionality
  1300. >anywhere.
  1301.  
  1302. >* Hmm... I guess the zoom box and the grow icon don't do anything
  1303. >either. Well, gee, at least I have system zoom and grow procedures,
  1304. >but my event procedure needs at least a page of checks surrounding
  1305. >each one before I can call it. Same thing for window movement.
  1306.  
  1307. >* Hey wait a second, you mean I actually have to activate and
  1308. >deactivate the windows myself? I have to deselect the controls, and
  1309. >all that? Oh come on....
  1310.  
  1311. >* I guess geometry management is too much to ask for? Oh well. Should
  1312. >have known better than to ask. Of course there are no subwindows on
  1313. >the Mac anyhow, so I guess there's not much point.
  1314.  
  1315. You think subwindows are a good thing? I can see why they would be 
  1316. used in X and all those other GUIs, but the Mac has a Human Interface.  
  1317. They really wouldn't fit.
  1318.  
  1319. >* Oh well, at least the update event is the same. What, you say I
  1320. >shouldn't use backing store? Why not? Why provide the feature and then
  1321. >say not to use it?
  1322.  
  1323. >                ...
  1324.  
  1325.  
  1326. >Well, you can see what I mean, if you have any familiarity with your
  1327. >typical Unix/X toolkit (which I had previously thought of as the
  1328. >pessimal programming environment!)
  1329.  
  1330. >I have to qualify all this by saying I've only been messing around
  1331. >with Mac programming for a few weeks, so I am not used to it all yet,
  1332. >but still.... I would have thought the basic programming paradigm
  1333. >might have advanced slightly in the last 10 years, at least to the
  1334. >extent of a standard re-entrant toolkit event-loop with callbacks and
  1335. >event interposition instead of all this manual dispatching. Even in an
  1336. >antique like Sunview you could code a typical application in probably
  1337. >1/5 to 1/2 the space of an equivalent Mac application. 
  1338.  
  1339. Unlike Sunview, X, Motif, etc, Macintosh has a considerably large 
  1340. installed base.  The people forming the installed base would be rather 
  1341. upset if all the applications they use suddenly broke overnight.
  1342.  
  1343. [snip]
  1344.  
  1345. >Of course all the above is IMHO only.... Of course there are many
  1346. >things available on the Mac platform that are either real expensive or
  1347. >very hard to implement in the typical unix environment. Still, I would
  1348. >really like someone to tell me: "You obviously haven't used the foo
  1349. >class libraries with the bar uims package and the baz event manager
  1350. >yet, so what do you expect".
  1351.  
  1352. You haven't tried the PowerPlant class library, which is included with 
  1353. CodeWarrior, so what do you expect?
  1354.  
  1355. >--
  1356. >             Laurence R. Brothers (quasar@bellcore.com)
  1357. >  Bellcore -- Computing Technology Integration -- Knowledge-Based Applications
  1358. >       "There is no memory with less satisfaction in it than the memory
  1359. >            of some temptation we resisted." -- James Branch Cabell
  1360.  
  1361. ......................................................................
  1362. Chris Thomas, Programmer, Echo Software, thunderone@delphi.com
  1363.  
  1364. +++++++++++++++++++++++++++
  1365.  
  1366. >From eascharf@u.washington.edu (Elizabeth Scharf)
  1367. Date: 22 Jul 1994 04:36:32 GMT
  1368. Organization: University of Washington, Seattle
  1369.  
  1370. This reminds me of Jerry Pournelle's infamous quote in 1984 to the effect
  1371. that the problem with the Macintosh was that "they wrote half of the
  1372. operating system and left the other half as an exercise to the reader." 
  1373.  
  1374. Fortunately, things have progressed a little since then...
  1375.  
  1376. rmgw
  1377.  
  1378. This is not my account:  Please address replies to hawkfish@aol.com
  1379.  
  1380. Disclaimer:  All views expressed are entirely my own and do not reflect 
  1381. the opinions of Elizabeth Scharf or the University of Washington.
  1382.  
  1383. - ---------------------------------------------------------------------------
  1384. Richard Wesley             | "If I can't dance, you can keep your
  1385. hawkfish@aol.com           |  revolution."
  1386. 71062.1711@compuserve.com  |        - Emma Goldman
  1387. - ---------------------------------------------------------------------------
  1388.  
  1389.  
  1390. +++++++++++++++++++++++++++
  1391.  
  1392. >From tbrown@magnus.acs.ohio-state.edu (Ted C Brown)
  1393. Date: 22 Jul 1994 05:33:23 GMT
  1394. Organization: The Ohio State University
  1395.  
  1396. In article <30mpgl$e40@search01.news.aol.com>,
  1397.  
  1398. >Yes, you've got it right, even down to your suspicion that application
  1399. >framework libraries like MacApp are what you are missing.  At one time
  1400. >Apple hinted that a framework like MacApp might make it into ROM, but that
  1401. >idea seems to have been abandoned, which in my opinion is just as well.  I
  1402. >worked on Bedrock for two years, which was to be a next generation
  1403. >framework (and may still become one in its reincarnation as the OpenDoc
  1404. >Parts Framework).  My experiences tell me that we still have more to learn
  1405. >about the right way to create application frameworks; putting one into ROM
  1406. >at this point seems like a bad idea.
  1407.  
  1408. I don't really want the app frameworks in ROM, I want the base classes to
  1409. exist in one place in memory, probably loaded by an extention, and for
  1410. programs to dynamically link to them.  The main problem with this is
  1411. that we'd have to settle on one app framework.  Well maybe not --
  1412. having the PowerPlant/MacApp/TCL load all at once would eat up alot
  1413. of memory, but dramatically reduce the code/memory needs of every program
  1414. that used them.
  1415.  
  1416. Maybe Dylan will do this (you'd think it'd be able to handle the Dynamic
  1417. Linking part).
  1418.  
  1419.  
  1420. +++++++++++++++++++++++++++
  1421.  
  1422. >From mburch@ksu.ksu.edu (Matt Burch)
  1423. Date: 21 Jul 1994 20:24:36 -0500
  1424. Organization: Kansas State University
  1425.  
  1426. For most of the stuff you mentioned, I use the freeware
  1427. TransSkel 3.0. It does all the event handling, menus, windows, etc.
  1428. and calls my callback routines when something relavent happens.
  1429. Easy as 3.1415927.
  1430.  
  1431. -- 
  1432. - -------------------------------------------------------
  1433. Matt Burch | mburch@ksu.ksu.edu | Cogito, ergo cogito sum  
  1434. - -------------------------------------------------------
  1435.  
  1436. +++++++++++++++++++++++++++
  1437.  
  1438. >From xperts@infi.net (Russell LaVelle)
  1439. Date: 22 Jul 1994 14:27:16 GMT
  1440. Organization: InfiNet
  1441.  
  1442. Ted C Brown (tbrown@magnus.acs.ohio-state.edu) wrote:
  1443. : In article <30mpgl$e40@search01.news.aol.com>,
  1444.  
  1445. : >Yes, you've got it right, even down to your suspicion that application
  1446. : >framework libraries like MacApp are what you are missing.  At one time
  1447. : >Apple hinted that a framework like MacApp might make it into ROM, but that
  1448. : >idea seems to have been abandoned, which in my opinion is just as well.  I
  1449. : >worked on Bedrock for two years, which was to be a next generation
  1450. : >framework (and may still become one in its reincarnation as the OpenDoc
  1451. : >Parts Framework).  My experiences tell me that we still have more to learn
  1452. : >about the right way to create application frameworks; putting one into ROM
  1453. : >at this point seems like a bad idea.
  1454.  
  1455. : I don't really want the app frameworks in ROM, I want the base classes to
  1456. : exist in one place in memory, probably loaded by an extention, and for
  1457. : programs to dynamically link to them.  The main problem with this is
  1458. : that we'd have to settle on one app framework.  Well maybe not --
  1459. : having the PowerPlant/MacApp/TCL load all at once would eat up alot
  1460. : of memory, but dramatically reduce the code/memory needs of every program
  1461. : that used them.
  1462.  
  1463. You want a Shared Library, which is possible in the PPC. 
  1464.  
  1465. : Maybe Dylan will do this (you'd think it'd be able to handle the Dynamic
  1466. : Linking part).
  1467.  
  1468. Thats axactly waht Dylan does. There is a Dylan Core that goes in the
  1469. extensions folder. Also, the developer can choose to link the core in to the
  1470. final app if they want stand alone.
  1471.  
  1472. --
  1473. MacXperts, Inc.                     804.353.7122
  1474. Certified Apple Developers          fax 804.358.3847
  1475. 3228-L West Cary St.                applelink: xperts
  1476. Richmond, VA  23221                 net: xperts@infi.net
  1477.  
  1478. +++++++++++++++++++++++++++
  1479.  
  1480. >From d88-jwa@dront.nada.kth.se (Jon Wätte)
  1481. Date: 22 Jul 1994 17:44:32 GMT
  1482. Organization: The Royal Institute of Technology
  1483.  
  1484. In <QUASAR.94Jul21132717@shadowgard.ctt.bellcore.com> quasar@ctt.bellcore.com (Laurence R. Brothers) writes:
  1485.  
  1486. >Keep in mind I'm used to an environment where you just don't have to
  1487. >worry about managing and dispatching your own events, and even
  1488. >updating windows will often be magically taken care of for you.  Most
  1489.  
  1490. Well, using a GUI toolkit for the Mac, like MacApp, TCL or the
  1491. non-C++ TransSkel, will take care of that for you. No muss no fuss.
  1492.  
  1493. >* What, I have to write my own event loop? Haven't they heard of
  1494. >callbacks?  Interposition? Well, I guess it's not a pre-emptive OS,
  1495. >but still, does that make any difference?
  1496.  
  1497. Do it once, then it's done. Or use one of the libraries available
  1498. and pointed out in the FAQ. If you really want to, this means you
  1499. can get more control if you really want to.
  1500.  
  1501. >* I have to manage operating system events myself? What's the point of
  1502. >having an operating system if it can't manage its own events?
  1503.  
  1504. What do you mean operating-system events? The only one I can think
  1505. of is the diskEvent, which, again, is handled by all available libraries,
  1506. or you write it once from sample code and forget it - the pro is that
  1507. you can intercept the event and do something interesting to the floppy
  1508. if you want to.
  1509.  
  1510. >I also must admit that I have only been using MPW C, not MacApp or any
  1511. >of the C++ stuff as yet. I imagine that every Mac programmer must use
  1512.  
  1513. See, there you go. It's like trying to write something in XLib.
  1514. You CAN, but it's not a good idea. For plain C, try TransSkel.
  1515.  
  1516. >while, be it MacApp, AppWannaBe, or whatever, but still, the whole
  1517. >thing seems a lot more awkward than it really needs to be.
  1518.  
  1519. Have you ever used XLib?
  1520.  
  1521. -- 
  1522.  -- Jon W{tte, h+@nada.kth.se, Mac Software Engineer Deluxe --
  1523.     
  1524. "Something horrible is wrong."
  1525.     - Steve Falkenberg
  1526.  
  1527. +++++++++++++++++++++++++++
  1528.  
  1529. >From nagle@netcom.com (John Nagle)
  1530. Date: Fri, 22 Jul 1994 17:46:26 GMT
  1531. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  1532.  
  1533. afcjlloyd@aol.com (AFC JLloyd) writes:
  1534. >Yes, you've got it right, even down to your suspicion that application
  1535. >framework libraries like MacApp are what you are missing.  At one time
  1536. >Apple hinted that a framework like MacApp might make it into ROM, but that
  1537. >idea seems to have been abandoned, which in my opinion is just as well.  I
  1538. >worked on Bedrock for two years, which was to be a next generation
  1539. >framework (and may still become one in its reincarnation as the OpenDoc
  1540. >Parts Framework).  My experiences tell me that we still have more to learn
  1541. >about the right way to create application frameworks; putting one into ROM
  1542. >at this point seems like a bad idea.
  1543.  
  1544. >All of the established frameworks address many of the points you raise,
  1545. >but none are without flaws.  So, you should survey the established
  1546. >frameworks, pick one, and then be prepared to enter a love/hate
  1547. >relationship with it.
  1548.  
  1549.        The basic problem is that all the Mac frameworks are lousy.
  1550. Apple's MacApp is big, old, clunky, and weakly supported.  Last year at this
  1551. time, Apple was telling developers to go to Symantec's Bedrock, which
  1552. got as far as a CD-ROM with the Bedrock headers and some sample apps
  1553. before being dropped.  Symantec has the "old TCL", written for their
  1554. dialect of C with some C++ extensions; it's widely used, more or less
  1555. stable, and on the way out.  Symantec also has the "new TCL", which is
  1556. true C++, very new, and very buggy.  Symantec is generally considered
  1557. to be concentrating on the Windows market now.  Then there's the new
  1558. vendor, MetroWerks, which is selling an almost-finished C++ compiler
  1559. (no templates) and a somewhat thin class library that goes with it.
  1560. Generally, users of MetroWerks are happier with their vendor than
  1561. Symantec users.
  1562.  
  1563.         There's also the "Nerdworks" library, which is a free class
  1564. library available on Apple's "ftp.apple.com", and there's a book that
  1565. goes with it.  This is a weak, but workable class library.
  1566.  
  1567.         At the high end, there are some tools from Neuron Data that
  1568. allow cross-platform development, but pricing is in the $10K and up
  1569. range.
  1570.  
  1571.                     John Nagle
  1572.  
  1573. +++++++++++++++++++++++++++
  1574.  
  1575. >From shebs@cygnus.com (Stan Shebs)
  1576. Date: Fri, 22 Jul 1994 18:51:39 GMT
  1577. Organization: /cygint/s1/users/shebs/.organization
  1578.  
  1579.  
  1580. In article <QUASAR.94Jul21132717@shadowgard.ctt.bellcore.com> quasar@ctt.bellcore.com (Laurence R. Brothers) writes:
  1581.  
  1582.    * What, I have to write my own event loop? Haven't they heard of
  1583.    callbacks?  Interposition? Well, I guess it's not a pre-emptive OS,
  1584.    but still, does that make any difference?
  1585.  
  1586. When I first wrote Xconq for X10, when the Xt toolkit was too broken to use,
  1587. guess what, I had to write my own event loop!
  1588.  
  1589. Actually, the value of the explicit event loop is that you can bypass
  1590. when necessary.  A heavily-tuned Mac program can have a number of event
  1591. loops, such as the one that handles the spiffy scrollbar response when
  1592. you're dragging the thumb.  This kind of thing really helps performance.
  1593.  
  1594. In general, Mac applications (binaries, not sources) are smaller and
  1595. use the CPU more efficiently than Unix/X applications.  It's very educational
  1596. to put a 68000-based Mac Plus side-by-side with a Sparc-based Sun machine,
  1597. and watch the Plus run interactive programs smoother and faster than the Sun!
  1598.  
  1599.    * Wait a minute, this isn't a scrollbar, it's just a bit of graphics.
  1600.    It doesn't actually *do* anything. It takes a page of code just to get
  1601.    to the point that you find out which scrollbar thingie got clicked on,
  1602.    then you have to do it all yourself. Apple wouldn't have to have all
  1603.    this style guide stuff if they actually implemented any functionality
  1604.    anywhere.
  1605.  
  1606. What makes you think that everybody wants to do scrollbars the same
  1607. way?  There are many application-specific optimizations and variations
  1608. available.  If you ever get to a point where you need to do one of these,
  1609. you'll be very glad it's not in ROM!
  1610.  
  1611. Incidentally, the guidelines are intended only as a starting point.  Many of
  1612. the interface developments of the past ten years started out by violating
  1613. some guideline, but then went on become part of the guidelines themselves.
  1614. Just compare a 1984 IM with the latest HIG...
  1615.  
  1616.    * I guess geometry management is too much to ask for? Oh well. Should
  1617.    have known better than to ask. Of course there are no subwindows on
  1618.    the Mac anyhow, so I guess there's not much point.
  1619.  
  1620. After having wasted months and years of my life messing with X's yucko
  1621. notions of "geometry management", I was very happy not to have that on
  1622. Macs.
  1623.  
  1624.    I have to qualify all this by saying I've only been messing around
  1625.    with Mac programming for a few weeks, so I am not used to it all yet,
  1626.    but still.... I would have thought the basic programming paradigm
  1627.    might have advanced slightly in the last 10 years, at least to the
  1628.    extent of a standard re-entrant toolkit event-loop with callbacks and
  1629.    event interposition instead of all this manual dispatching. Even in an
  1630.    antique like Sunview you could code a typical application in probably
  1631.    1/5 to 1/2 the space of an equivalent Mac application. 
  1632.  
  1633. Of course, the main application that everybody runs in a "modern" Unix
  1634. environment is a terminal emulator set to mimic terminals from 10-20 years
  1635. ago, still you type "ls" and "rm" just like Ken and Dennis did, and
  1636. heaven help you if you try to write a program that doesn't have a console
  1637. available for stdout to write to, even if it *is* an "toolkit event-loop
  1638. with callbacks".  
  1639.  
  1640. I think you'll find that it takes more than a few weeks to realize that
  1641. the Unix style of programming is not the only way, and that the Mac style,
  1642. in addition to its weaknesses, has many strengths that the Unix world has
  1643. yet to approach.
  1644.  
  1645.    It must take at least 500 lines of C to produce a Mac application that
  1646.    is minimally conformant to the general rules of application behavior,
  1647.    probably more. IMHO, even a 3 line hello world program should
  1648.    automagically do all "the right things" because the windowing
  1649.    environment/finder/OS/whatever should take care of it all.
  1650.  
  1651. That's not exactly fair, because the "3-line hello world" of Unix doesn't do
  1652. *any* interaction at all.  If I just wanted to scribble on the screen and
  1653. exit, I could write a pretty short Mac program for that, and do it with just
  1654. the basic Mac traps.
  1655.  
  1656. Also, once the basic framework is in place, you don't have to mess with it
  1657. anymore.  I now have versions of Xconq for both Macs and X11, and it's
  1658. *much* easier to add a new menu item or button or image to the Mac version,
  1659. so much so that my Mac version usually gets all the features first.
  1660.  
  1661.    Of course there are many
  1662.    things available on the Mac platform that are either real expensive or
  1663.    very hard to implement in the typical unix environment. 
  1664.  
  1665. Amen to that!  Try having a reasonable response time when dragging
  1666. something with the mouse.  Can you say "stu-stutt-stu-st-stutter"?
  1667.  
  1668.    Still, I would
  1669.    really like someone to tell me: "You obviously haven't used the foo
  1670.    class libraries with the bar uims package and the baz event manager
  1671.    yet, so what do you expect".
  1672.  
  1673. Others have gone into the details, so I'll just leave it at the "what do you
  1674. expect". :-)
  1675.  
  1676.                             Stan Shebs
  1677.                             Cygnus Support
  1678.                             shebs@cygnus.com
  1679.  
  1680. +++++++++++++++++++++++++++
  1681.  
  1682. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  1683. Date: Fri, 22 Jul 1994 17:24:12 GMT
  1684. Organization: Apple Computer
  1685.  
  1686. Stuart R. Harper, stuart@lorelei.ece.drexel.edu writes:
  1687. > That was an EXTREME cop-out. Reading Mr. Brothers list of complaints
  1688. > reminded me of my own annoyance with programming the mac after moving over
  1689. > from the Amiga, a 256K RAM/ROM, 68K based system.
  1690.  
  1691. Well, I'm not saying that the design of the Mac OS was perfect; I think they
  1692. really screwed up in some areas and we're still paying the price for that.
  1693. Your point about the Amiga is valid; nevertheless, note that the Amiga came
  1694. out a few years after the Mac and was able to learn from some of its mistakes
  1695. (the same can be said for Windows). Also, both may seem tiny by today's
  1696. standards but there is a _big_ difference between a system with 256k each of
  1697. RAM and ROM, and one with 128k RAM and 64k ROM. The Amiga had twice the RAM
  1698. (which means much more RAM available to apps) and four times the ROM, so that
  1699. gave them more headroom to put in things like e.g. threading and an improved
  1700. Toolbox interface.
  1701.  
  1702. > Requiring the development environment to push basic features invites all
  1703. > kinds of compatibilty problems between systems, increases development time
  1704. > with wasted compilation of 'standard' actions and increases the overall
  1705. > code 'bloat'.
  1706.  
  1707. Good dynamic linking technology, as is finally starting to appear on the Mac
  1708. with ASLM and SOM, will take care of a lot of that. (Note that the NeXT
  1709. application framework is a shared library living on top of a very Mac-like
  1710. lower level toolbox.) I really don't care whether the code that handles my
  1711. basic app functionality is in ROM or in a shared library; it looks the same
  1712. to me, and the library is easier to update and maintain. OpenDoc and its
  1713. framework will take advantage of this in a big way.
  1714.  
  1715. --Jens Alfke
  1716.   jens_alfke@powertalk              Rebel girl, rebel girl,
  1717.             .apple.com              Rebel girl you are the queen of my world
  1718.  
  1719. +++++++++++++++++++++++++++
  1720.  
  1721. >From isis@netcom.com (Mike Cohen)
  1722. Date: Fri, 22 Jul 1994 18:21:07 GMT
  1723. Organization: ISIS International
  1724.  
  1725. Look at one of the class libraries or application frameworks such as TCL,
  1726. MacApp, or PowerPlant. All of them take care of the event dispatching & all
  1727. of the other things that you're so grossed out about - you only have to add
  1728. your own callbacks by overriding various behaviours, such as clicking in the
  1729. content are of a pane. They even handle scrolling by providing a scroller
  1730. object which does most of the work.
  1731. -- 
  1732. Mike Cohen - isis@netcom.com
  1733. NewtonMail, eWorld: MikeC / ALink: D6734 / AOL: MikeC20
  1734. Home Page: file://ftp.netcom.com/pub/isis/home.html
  1735.  
  1736. +++++++++++++++++++++++++++
  1737.  
  1738. >From oster@netcom.com (David Phillip Oster)
  1739. Date: Fri, 22 Jul 1994 18:32:14 GMT
  1740. Organization: Netcom Online Communications Services (408-241-9760 login: guest)
  1741.  
  1742.  
  1743. Just to add my fuel to the flame war:
  1744.  
  1745. There is geometry management, if you want it, so it doesn't cost you 
  1746. anything if you don't use it. You get it by writing rez #define expressions.
  1747. This lets you line dialog items up, or arrange them any way you like,
  1748. but at compile time, rather than run time.
  1749.  
  1750. Ever try to write copy and paste in motif? There are multiple, incompatible
  1751. definitions of the clipboard, so doing what on a mac is
  1752. ZeroScrap()
  1753. PutScrap()
  1754.  
  1755. takes pages of code to do correctly (read the emacs source for an example.)
  1756. - - - -
  1757. Callbacks are just syntactic sugar around X's event loop. If you know, 
  1758. because you are writing your program, what procedure you are going to call
  1759. in response to an event, then it is much simpler to simply call the procedure:
  1760. for(;;){
  1761.     GetNextEvent(everyEvent, &event);
  1762.     switch(event->what){
  1763.     case keyDown: GoKey(&event);    break;
  1764.     ...
  1765.     }
  1766. }
  1767.  
  1768. as opposed to the mysterious:
  1769.     XtAddCallback(rootWidget, XmNkeyDownEventCallback, GoKey, NULL);
  1770.  
  1771. In fact, Apple has lost the vision, and started importing to many unix heads:
  1772. the interface to the Applescript inter-application communication system looks
  1773. like it was designed by Unix wannabees.
  1774.  
  1775. When you are trying to debug a program, it is much easier to put a single
  1776. breakpoint in an explicit event loop, and trace it than it is to have the
  1777. heart of the program embedded in some system undebuggable library, and have
  1778. to set breakpoints in ALL your callbacks because you don't know which one
  1779. will trigger.
  1780.  
  1781. X gives you no help with printing: once you write your application to
  1782. do its drawing to the screen, you need to write it a second time to
  1783. directly generate postscript, so you can write a text file of postsript
  1784. to send to the printer. On the mac, you open a printer GrafPort, and
  1785. do the same drawing to it that you do to the screen. The translation
  1786. to the printer driver happens automatically.
  1787.  
  1788. Then of course, there is the speed of progress in the two environments.
  1789. At least there is a standard inter-application communication system for
  1790. the Mac.  Unix still hasn't fixed the security bug in "login" I reported
  1791. back in 1977 : 17 years ago.
  1792.  
  1793. I've done numerous commercial products on Macintosh and on Unix/Motif.
  1794. Macs are much easier to program at the toolbox level than Unix/Motif.
  1795.  
  1796. +++++++++++++++++++++++++++
  1797.  
  1798. >From Rob Browning <osiris@cs.utexas.edu>
  1799. Date: 22 Jul 1994 19:30:30 GMT
  1800. Organization: The University of Texas at Austin, Austin, Texas
  1801.  
  1802. In article <30p0i0$fhi@news.kth.se> Jon W!tte, d88-jwa@dront.nada.kth.se writes:
  1803. >>Keep in mind I'm used to an environment where you just don't have to
  1804. >>worry about managing and dispatching your own events, and even
  1805. >>updating windows will often be magically taken care of for you.  Most
  1806.  
  1807. Une thing that I would mention is that MCL (Yes that's Macintosh Common 
  1808. Lisp) has a very impressive class library that handles your interface 
  1809. with the Mac Toolbox.  It has callbacks, it handles the event loop behind 
  1810. your back, and you don't ever have to call WaitNextevent (but you can if 
  1811. you like).
  1812.  
  1813. It supports windows which contain views which contain subviews...  And 
  1814. you just subclass one of these and override it's view-draw-contents 
  1815. method, and you are on your way.  All this and much much more :>
  1816.  
  1817. And not to start a religious war, but if you put in all the type 
  1818. declarations in your code (the ones that you have to put in a C/C++ 
  1819. program) you can get quite good performance.  No, it won't beat C or C++ on 
  1820. a reguar basis, But as a development/prototyping environment, it is quite 
  1821. impressive.  It's too bad it looks like it is going the way of the DoDo.  
  1822. MCL shows what Apple can do if they put their mind to it.  And as good as 
  1823. Dylan sounds, it's not quite as powerful as Common Lisp.
  1824.  
  1825. --Rob.
  1826.  
  1827. +++++++++++++++++++++++++++
  1828.  
  1829. >From ingemar@lysator.liu.se (Ingemar Ragnemalm)
  1830. Date: 22 Jul 1994 20:23:12 GMT
  1831. Organization: (none)
  1832.  
  1833. mburch@ksu.ksu.edu (Matt Burch) writes:
  1834.  
  1835. >For most of the stuff you mentioned, I use the freeware
  1836. >TransSkel 3.0. It does all the event handling, menus, windows, etc.
  1837. >and calls my callback routines when something relavent happens.
  1838. >Easy as 3.1415927.
  1839.  
  1840. One of the *best* things with TransSkel is that while it does simplify the
  1841. programming a lot (making trivial programs trivial to write) I still have
  1842. full access to the Toolbox as much as I *want*.
  1843.  
  1844. For example, when I wanted to handle suspend/resume events, using TransSkel
  1845. 2.0 (which was made before suspend/resume was invented), I could add that
  1846. without editing TransSkel at all!
  1847.  
  1848. I still use TransSkel 2.0 (updated for some "new" stuff like WNE and
  1849. hierarcical menus), and it works just great. I guess 3.0 is better,
  1850. but it doesn't come with Pascal-useable TransEdit and TransDisplay.
  1851.  
  1852. Programming the Mac from the ground up from the Toolbox, without a package
  1853. like that, is really confusing. Getting into stuff like Apple Events,
  1854. Appletalk and QuickTime is even worse. I find myself writing simplified
  1855. interfaces to all of them as I start using them. You can go to that level
  1856. later, but do yourself a favor and start on a level that is simpler.
  1857.  
  1858. --
  1859. - -
  1860. Ingemar Ragnemalm, PhD
  1861. Image processing, Mac shareware games
  1862. E-mail address: ingemar@isy.liu.se or ingemar@lysator.liu.se
  1863.  
  1864. +++++++++++++++++++++++++++
  1865.  
  1866. >From aclaasse@nyx.cs.du.edu (Arne Claassen)
  1867. Date: 22 Jul 1994 15:04:21 -0600
  1868. Organization: University of Denver, Dept. of Math & Comp. Sci.
  1869.  
  1870. In article <30n74k$7nr@matt.ksu.ksu.edu>,
  1871. Matt Burch <mburch@ksu.ksu.edu> wrote:
  1872. >For most of the stuff you mentioned, I use the freeware
  1873. >TransSkel 3.0. It does all the event handling, menus, windows, etc.
  1874. >and calls my callback routines when something relavent happens.
  1875. >Easy as 3.1415927.
  1876.  
  1877. Where can i find TransSkel? I've tried archie and sumex-aim. but to no
  1878. avail. is it under a different name than transskel?
  1879.  
  1880. Arne F. claassen
  1881. claassen@ebs330.eb.uah.edu
  1882.  
  1883.  
  1884.  
  1885. +++++++++++++++++++++++++++
  1886.  
  1887. >From shimpei@leland.Stanford.EDU (Shimpei Yamashita)
  1888. Date: 23 Jul 1994 10:22:40 GMT
  1889. Organization: Stanford University, CA 94305, USA
  1890.  
  1891. In article <30pc8l$1kk@nyx.cs.du.edu>,
  1892. Arne Claassen <aclaasse@nyx.cs.du.edu> wrote:
  1893.  
  1894. :Where can i find TransSkel? I've tried archie and sumex-aim. but to no
  1895. :avail. is it under a different name than transskel?
  1896. :
  1897. :Arne F. claassen
  1898. :claassen@ebs330.eb.uah.edu
  1899. :
  1900. :
  1901. ftp.primate.wisc.edu in /pub/mac/TransSkel
  1902.  
  1903. Would someone like to upload it to sumex? I just got it, and I don't want
  1904. to upload anything I haven't evaluated for a few days.
  1905. -- 
  1906. Shimpei Yamashita, Stanford University           shimpei@leland.stanford.edu
  1907.  
  1908. +++++++++++++++++++++++++++
  1909.  
  1910. >From d88-jwa@dront.nada.kth.se (Jon Wätte)
  1911. Date: 24 Jul 1994 10:52:09 GMT
  1912. Organization: The Royal Institute of Technology
  1913.  
  1914. In <stuart-2307941144580001@e4-lebow-n1-5-35.ece.drexel.edu> stuart@lorelei.ece.drexel.edu (Stuart R. Harper) writes:
  1915.  
  1916. >Agreed! Quick adoption of ASLM will make up for alot of real or perceived
  1917. >problem in Mac code development i.e. You don't like rolling all your own
  1918. >UI code, find GUI library that you like that does the job for you.
  1919.  
  1920. ASLM is doomed to die; except OpenTransport will use it so it
  1921. has to survive :-(
  1922.  
  1923. ASLM does dynamic linking of C++ classes compiled with MPW C++
  1924. (CFront) For other things, with other compilers/environments,
  1925. it doesn't work.
  1926.  
  1927. SOM is the future, and it will be on top of the CFM which is _here_
  1928. in production, release, use, ... since March 14.
  1929.  
  1930. Cheers,
  1931.  
  1932.                     / h+
  1933. -- 
  1934.  -- Jon W{tte, h+@nada.kth.se, Mac Software Engineer Deluxe --
  1935.  
  1936. "Windows doesnÕt use AppleEvents."
  1937.     - Anon
  1938.  
  1939. +++++++++++++++++++++++++++
  1940.  
  1941. >From Mark Hanrek <hanrek@cts.com>
  1942. Date: Sun, 24 Jul 1994 10:45:55 GMT
  1943. Organization: The Information Workshop
  1944.  
  1945.  
  1946. There have been many enlightened observations, and a few chuckles, too,
  1947. regarding a lot of related things.
  1948.  
  1949. I was rolling on the floor when I read the one about where...
  1950.  
  1951.      "The Mac was built only half-way, and the 
  1952.       rest was left as an exercise for the reader."
  1953.  
  1954.  
  1955. But with respect to identifying the real source of Mr. Brother's
  1956. programming problems, you've all missed it.
  1957.  
  1958.   --------------------------------------------------------------
  1959.    The problem is with HOW one is introduced to any new subject.
  1960.   --------------------------------------------------------------
  1961.  
  1962. If an excellent guide were sitting next to him for a week or two, he
  1963. would still be having a pleasant experience, regardless of platform, and
  1964. probably out-producing most of the rest of his colleagues.
  1965.  
  1966. But, every last one of us is thrown into any new subject, sink or swim...
  1967.  
  1968.  
  1969. - --
  1970.  
  1971. When it gets frustrating, we question the design.  :)  And rightly so!
  1972.  
  1973. But when we're finally making progress, we forget, and go back to
  1974. accepting things the way they are.
  1975.  
  1976. And "acceptance" is what perpetuates "the trap", where we are all so busy
  1977. trying to catch up that we never have any extra time to help make things
  1978. better.
  1979.  
  1980.  
  1981. - --- The Power of Simplicity
  1982.  
  1983. Simple "guided introductions" into a new <whatever> can mean 5,000 people
  1984. working productively with <whatever>, instead of 50.
  1985.  
  1986. It means avoiding and preventing humongous amounts of floundering,
  1987. repeating classic mistakes, repeated questions, and having to reverse
  1988. incorrect models we've created in our heads.
  1989.  
  1990. And so easily done.  It doesn't take much.
  1991.  
  1992.  
  1993. - --- Case In Point As We Speak
  1994.  
  1995. Mark my words.  You read it here (too).
  1996.  
  1997. In three years we'll all be wondering why it has taken forever for
  1998. OpenDoc to catch on.  Everyone will have an opinion.
  1999.  
  2000. Yes, there were the "guided introductions" into the fabulous world of
  2001. OpenDoc made available through Apple's Developer University, but their
  2002. effectiveness was negated by Apple needing to make a return on its
  2003. investment in developing its tutorials, rather than its investment in the
  2004. supply of OpenDoc-savvy programmers, and as a consequence only 50
  2005. programmers purchased them.
  2006.  
  2007.  
  2008. Well...
  2009.  
  2010.   What did we expect when we take an existing set of programmers,
  2011.   and then ALL AT ONCE ask them to...
  2012.  
  2013.      * learn how to use a second development environment 
  2014.        (MPW or ToolServer) along with their primary one, 
  2015.        with many ALSO switching to a new primary environment.
  2016.  
  2017.      * learn C++.
  2018.  
  2019.      * learn the tricks of the trade for writing programs that 
  2020.        run correctly on the PowerMacintosh.
  2021.  
  2022.      * get their object-oriented savvy developed so they too can
  2023.        speak comfortably of mixin classes, operator overloading,
  2024.        iostreams, templates, virtual destructors, unmangling,
  2025.        and the relative merits of various class libraries.
  2026.  
  2027.      * Get up ot speed on at least one of Apple's new technologies,
  2028.        which includes AppleScript/OSA, Drag Manager, AE/Object, 
  2029.        AOCE, Threads, CommToolbox/TCP, Components/ASLM, new printing
  2030.        architecture, etc.
  2031.  
  2032.      * Produce sellable OpenDoc parts by mastering OpenDoc's
  2033.        new paradigms, new terms and concepts, normally large class
  2034.        library, IBM's SOM, and the new tools that work with them.
  2035.  
  2036.  
  2037. That's "the shock of the new".
  2038.  
  2039. How can we expect programmers to make progress when they are "thrown in"
  2040. to handle all of this, unguided, sink or swim, and offered no way to get
  2041. past dog-paddling?
  2042.  
  2043. Every question in csmp that has been asked before is DOG-PADDLING.  
  2044.  
  2045. Every valuable question/answer that is not saved and made easily
  2046. re-accessible in a central place perpetuates DOG-PADDLING.
  2047.  
  2048.  
  2049. - ---------------------------------------------------------------------
  2050.  
  2051. ... and all this just seems to go in one ear, and out the other, 'cuz
  2052. things go right back to the way they were, just like the discussion in
  2053. this thread will.  
  2054.  
  2055. Watch...  
  2056.  
  2057. :)
  2058.  
  2059.  
  2060. Mark Hanrek
  2061. The Information Workshop
  2062.  
  2063. +++++++++++++++++++++++++++
  2064.  
  2065. >From stuart@lorelei.ece.drexel.edu (Stuart R. Harper)
  2066. Date: Sat, 23 Jul 1994 11:44:58 -0400
  2067. Organization: Drexel U.
  2068.  
  2069. In article <1994Jul22.172412.20391@gallant.apple.com>, Jens Alfke
  2070. <jens_alfke@powertalk.apple.com> wrote:
  2071.  
  2072. > Stuart R. Harper, stuart@lorelei.ece.drexel.edu writes:
  2073. > > That was an EXTREME cop-out. Reading Mr. Brothers list of complaints
  2074. > > reminded me of my own annoyance with programming the mac after moving over
  2075. > > from the Amiga, a 256K RAM/ROM, 68K based system.
  2076. > Well, I'm not saying that the design of the Mac OS was perfect; I think they
  2077. > really screwed up in some areas and we're still paying the price for that.
  2078. > Your point about the Amiga is valid; nevertheless, note that the Amiga came
  2079. > out a few years after the Mac and was able to learn from some of its mistakes
  2080. > (the same can be said for Windows). Also, both may seem tiny by today's
  2081. > standards but there is a _big_ difference between a system with 256k each of
  2082. > RAM and ROM, and one with 128k RAM and 64k ROM. The Amiga had twice the RAM
  2083. > (which means much more RAM available to apps) and four times the ROM, so that
  2084. > gave them more headroom to put in things like e.g. threading and an improved
  2085. > Toolbox interface.
  2086.  
  2087. True enough, but when the Mac+ and MacII made their rollouts with their
  2088. 128KROM and 256KROM, Apple still didn't see fit to add a "Default Action
  2089. Manager" or update the Toolbox/Event Manager to take care of basic
  2090. user-interface function. Yeah, I know, they had alot of other development
  2091. going on (Color QuickDraw, 020 migration, Networking etc), but adding a
  2092. basic event->action or even a shared library framework to the ROM would
  2093. have made accessing new features a breeze. 
  2094.  
  2095.  
  2096. > > Requiring the development environment to push basic features invites all
  2097. > > kinds of compatibilty problems between systems, increases development time
  2098. > > with wasted compilation of 'standard' actions and increases the overall
  2099. > > code 'bloat'.
  2100. > Good dynamic linking technology, as is finally starting to appear on the Mac
  2101. > with ASLM and SOM, will take care of a lot of that. (Note that the NeXT
  2102. > application framework is a shared library living on top of a very Mac-like
  2103. > lower level toolbox.) I really don't care whether the code that handles my
  2104. > basic app functionality is in ROM or in a shared library; it looks the same
  2105. > to me, and the library is easier to update and maintain. OpenDoc and its
  2106. > framework will take advantage of this in a big way.
  2107.  
  2108. Agreed! Quick adoption of ASLM will make up for alot of real or perceived
  2109. problem in Mac code development i.e. You don't like rolling all your own
  2110. UI code, find GUI library that you like that does the job for you.
  2111.  
  2112. -- 
  2113. Stuart R. Harper - E4 Lab Technician - LeBow 132 - CCD - Drexel U.
  2114. stuart@lorelei.ece.drexel.edu        harper@e4mail.ece.drexel.edu
  2115.  
  2116. +++++++++++++++++++++++++++
  2117.  
  2118. >From nagle@netcom.com (John Nagle)
  2119. Date: Sun, 24 Jul 1994 17:10:21 GMT
  2120. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  2121.  
  2122. Rob Browning <osiris@cs.utexas.edu> writes:
  2123. >In article <30p0i0$fhi@news.kth.se> Jon W!tte, d88-jwa@dront.nada.kth.se writes:
  2124. >>>Keep in mind I'm used to an environment where you just don't have to
  2125. >>>worry about managing and dispatching your own events, and even
  2126. >>>updating windows will often be magically taken care of for you.  Most
  2127.  
  2128. >Une thing that I would mention is that MCL (Yes that's Macintosh Common 
  2129. >Lisp) has a very impressive class library that handles your interface 
  2130. >with the Mac Toolbox.  It has callbacks, it handles the event loop behind 
  2131. >your back, and you don't ever have to call WaitNextevent (but you can if 
  2132. >you like).
  2133.  
  2134.        Is this still an active product?  Is there a PPC version?
  2135.  
  2136.        We used to think Common LISP was big.  Then came C++.
  2137.  
  2138.                     John Nagle
  2139.  
  2140. +++++++++++++++++++++++++++
  2141.  
  2142. >From d88-jwa@hemul.nada.kth.se (Jon Wätte)
  2143. Date: 24 Jul 1994 17:45:49 GMT
  2144. Organization: The Royal Institute of Technology
  2145.  
  2146. In <CtFxwL.K0B@crash.cts.com> Mark Hanrek <hanrek@cts.com> writes:
  2147.  
  2148. >Simple "guided introductions" into a new <whatever> can mean 5,000 people
  2149. >working productively with <whatever>, instead of 50.
  2150.  
  2151. If the <whatever> is the Mac toolbox, there are courses from
  2152. the Developer University, both self-paced and on-site. They
  2153. are expensive, but from what I hear, very good.
  2154.  
  2155. >It means avoiding and preventing humongous amounts of floundering,
  2156.  
  2157. The FAQ for this group is intended to at least give a hint of what
  2158. you should do in that situation.
  2159.  
  2160. >That's "the shock of the new".
  2161.  
  2162. Well, with these new technologies, and OpenDoc specifically, it
  2163. seems as if Apple is trying to bet it all on one card: We Want The
  2164. Future To Be Like This. Unfortunately, they don't do it with all
  2165. their hearts, orr rather, with all their wallet, just with all of
  2166. their minds, which may explain why Apple seems so mindless of
  2167. other things :-)
  2168.  
  2169. I can envision a future where OpenDoc works the wonders it's supposed
  2170. to do, but as you say: it's all about adoption. And adoption right
  2171. now is not feasible; there's not even a sanctioned way of using a
  2172. scroll bar...
  2173.  
  2174. Cheers,
  2175.  
  2176.                     / h+
  2177. -- 
  2178.  -- Jon W{tte, h+@nada.kth.se, Mac Software Engineer Deluxe --
  2179.  
  2180.   I offer a pot of gold for Gates' head on a pole.
  2181.   Naah - bashing Microsoft is "out." Love, Peace and Understanding!
  2182.  
  2183. +++++++++++++++++++++++++++
  2184.  
  2185. >From aclaasse@nyx.cs.du.edu (Arne Claassen)
  2186. Date: 24 Jul 1994 14:43:57 -0600
  2187. Organization: University of Denver, Dept. of Math & Comp. Sci.
  2188.  
  2189. In article <nagleCtGFp9.GGo@netcom.com>, John Nagle <nagle@netcom.com> wrote:
  2190. >       Is this still an active product?  Is there a PPC version?
  2191. >
  2192. >       We used to think Common LISP was big.  Then came C++.
  2193.  
  2194. The last version is MCL 2.0 and available from APDA. Dunno the price, but i'd
  2195. say about $500. 
  2196.  
  2197. MCL 2.0 is an updated version of Franz's Allegro Common LISP and does include
  2198. CLOS (Common Lisp Object System) as to the specifications discussed by Guy
  2199. Steele in Common Lisp: The Language, second edition. It does not, however
  2200. include CLIM (Common LISP Interface Manager) which will allow transporatable
  2201. application development for all Common LISP platforms. CLIM is available in
  2202. beta (maybe later by now) form from a number of independent developers.
  2203. Forget support from Apple, tho. You'd actually get more helpful info from Franz
  2204. although they don't support it either.
  2205.  
  2206. So, no PPC and not likely either.
  2207.  
  2208. On the other hand, for large applications, it's a great development platform,
  2209. does include excellent tools for dealing with interface elements and implements
  2210. the Event Loop in the environment.
  2211.  
  2212. Of course there's always the overhead. A simple application will take almost
  2213. a Meg in LISP overhead for the compiled application, but if you build a five
  2214. meg application, that's not too bad (HMM.. me thinks, MS Windows was developed
  2215. in LISP with their overhead... :)
  2216.  
  2217. Arne F. Claassen     claassen@ebs330.eb.uah.edu
  2218.  
  2219.  
  2220.  
  2221. +++++++++++++++++++++++++++
  2222.  
  2223. >From aclaasse@nyx.cs.du.edu (Arne Claassen)
  2224. Date: 25 Jul 1994 07:30:39 -0600
  2225. Organization: University of Denver, Dept. of Math & Comp. Sci.
  2226.  
  2227. In article <30voj2$j37@news.kth.se>,
  2228. Jon Wätte <d88-jwa@hemul.nada.kth.se> wrote:
  2229. >In <30u5jq$fvg@acmex.gatech.edu> gt7092d@prism.gatech.edu (Damir Smitlener) writes:
  2230. >>Until there is something like Visual C++ (if there is and i havent  
  2231. >>seen it, please tell me! and i dont mean multi-thousand dollar 
  2232. >>packages.), ile leave 'Mac' programming to those who want it. 
  2233. >
  2234. >Why not pay a few thousand dollars for a good package? You paid
  2235. >a lot for you Mac, you're going to earn your living with it, so
  2236. >you'd better have decent tools, right?
  2237.  
  2238. Um, i the point is that on inferior (ok, if someone wants to flame me for
  2239. calling Windows inferior, go right ahead) platforms there are excellent tools
  2240. for developing software and one can worry less about meeting the overhead
  2241. needed for a program that fits well into the platform. While on the mac, there
  2242. really isn't anything like cheap tools, such as Visual C++, so why should i
  2243. spent more money than a Windows developer? Because of the glory and
  2244. warm'n'fuzzy-feeling of programming for the Macintosh? Um, i love my Mac and
  2245. i'll never go back to PCs, but i don't see why there cannot be a development
  2246. environment worth the OS we work with.
  2247. >
  2248. >>All these defenses of mac-programming here confuse me; do you
  2249. >>folks WANT to work that hard on non-essentials? Doesnt anyone
  2250. >
  2251. >No; we DON'T work hard on essentials. Either we did it once
  2252. >before, and copy/paste into a new project, or we use one of the
  2253. >many good environments/frameworks available. But if you're the
  2254. >typical lazy integrator consultant type, I'm not surprised you
  2255. >don't want to do the research necessary before condemning a
  2256. >platform you haven't used for any extended period of time.
  2257.  
  2258. I'm doing research and i'm getting places, but it's still annoying. But 
  2259. defending the intrinic necessity for the overhead in even handling and
  2260. interface management, strikes me in much of the same way as the arguments
  2261. from unix-people i know that try to convince me of the intrinsic superiority
  2262. command lines as opposed to GUIs (another posssible flame war, but i'd rather
  2263. not get into that one)
  2264.  
  2265. Arne F. Claassen
  2266. - --
  2267. claassen@ebs330.eb.uah.edu
  2268.  
  2269.  
  2270. +++++++++++++++++++++++++++
  2271.  
  2272. >From gt7092d@prism.gatech.edu (Damir Smitlener)
  2273. Date: 24 Jul 1994 12:41:30 -0400
  2274. Organization: Georgia Institute of Technology
  2275.  
  2276. >How can we expect programmers to make progress when they are "thrown in"
  2277. >to handle all of this, unguided, sink or swim, and offered no way to get
  2278. >past dog-paddling?
  2279.  
  2280. Simple answer: you cant. As a relative newcomer to the mac, but
  2281. not to programming in general, I write NO software that can be
  2282. considered 'Mac-like.' I write using standard c/c++, which means
  2283. i basically write unix-code. To take this code to windows has
  2284. proven quite painless with tools like Visual C++. Going to X ,
  2285. not too bad.
  2286.  
  2287. Making it Mac software? Uhh...ime simply not interested in working
  2288. that hard on stuff that should be handled be the OS. Yes, Ive 
  2289. looked at TransSkel, PowerPlant, etc. Compared even to Visual BASIC  
  2290. they _suck_. 
  2291.  
  2292. Until there is something like Visual C++ (if there is and i havent  
  2293. seen it, please tell me! and i dont mean multi-thousand dollar 
  2294. packages.), ile leave 'Mac' programming to those who want it. 
  2295.  
  2296. All these defenses of mac-programming here confuse me; do you
  2297. folks WANT to work that hard on non-essentials? Doesnt anyone
  2298. wonder why Doom will be running on SGI and anything that runs
  2299. linux before it runs on Macs? In fact, ile make a prediction:
  2300. Doom will run as a linux app on PowerMacs before it runs as
  2301. a System 7.x app.
  2302.  
  2303. Still, i am impressed by the skill of those who can do this well.
  2304. I wont be one of them, even though i love my powermac.
  2305.  
  2306. damir
  2307. gt7092d@prism.gatech.edu
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.  
  2315. +++++++++++++++++++++++++++
  2316.  
  2317. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  2318. Date: Mon, 25 Jul 1994 22:17:57 GMT
  2319. Organization: Apple Computer
  2320.  
  2321. Jon W!tte, d88-jwa@hemul.nada.kth.se writes:
  2322. > I can envision a future where OpenDoc works the wonders it's supposed
  2323. > to do, but as you say: it's all about adoption. And adoption right
  2324. > now is not feasible; there's not even a sanctioned way of using a
  2325. > scroll bar...
  2326.  
  2327. Hmm, you mentioned this once before in private e-mail. To do scrolling you
  2328. just use two frames; it's really almost exactly the way it works in MacApp
  2329. with a scroller view embedding the view to be scrolled. There is a new recipe
  2330. that describes how to do scrolling, which I can e-mail you.
  2331.  
  2332. Really, is this the main objection you have to OpenDoc? These things can seem
  2333. tricky, but recall all the problems you must have had figuring out how to do
  2334. scrolling and growing windows when you first learned to program the Mac ... I
  2335. know that moving the scrollbars around and invalidating the proper areas of
  2336. the window gave me fits. It's just a matter of learning new things.
  2337.  
  2338. And, back to the theme of this thread, the OpenDoc Parts Framework will take
  2339. care of the grungy details of scrolling for you.
  2340.  
  2341. --Jens Alfke
  2342.   jens_alfke@powertalk              Rebel girl, rebel girl,
  2343.             .apple.com              Rebel girl you are the queen of my world
  2344.  
  2345. +++++++++++++++++++++++++++
  2346.  
  2347. >From h+@nada.kth.se (Jon Wätte)
  2348. Date: Tue, 26 Jul 1994 10:02:53 +0200
  2349. Organization: Royal Institute of Theoretical Theology
  2350.  
  2351. In article <1994Jul25.221757.24322@gallant.apple.com>,
  2352.  Jens Alfke <jens_alfke@powertalk.apple.com> wrote:
  2353.  
  2354. >Hmm, you mentioned this once before in private e-mail. To do scrolling you
  2355. >just use two frames; it's really almost exactly the way it works in MacApp
  2356. >with a scroller view embedding the view to be scrolled. There is a new recipe
  2357. >that describes how to do scrolling, which I can e-mail you.
  2358.  
  2359. Why wasn't that on the a6 source CD?
  2360.  
  2361. Indeed, the way I looked at it, you had to get at the root
  2362. view to install your scrollbar there, and that didn't really
  2363. work very well with embedding. There were also printing problems,
  2364. but I can live with them (who wants a scrollbar on their printout? :-)
  2365.  
  2366. >Really, is this the main objection you have to OpenDoc? These things can seem
  2367.  
  2368. No; it's the easiest objection. I could go on about what compiling
  2369. in CFront/MPW does to my productivity, but I won't :-)
  2370. There's also this undefined thing called memory layout. What if
  2371. you want to know how much memory you have to play with for
  2372. caching issues, or want to do your own "virtual memory" by
  2373. purging blocks to disk? There's no supported way of finding
  2374. this out; you just have to assume your component will have
  2375. "enough" for some default.
  2376.  
  2377. >And, back to the theme of this thread, the OpenDoc Parts Framework will take
  2378. >care of the grungy details of scrolling for you.
  2379.  
  2380. Any year now.
  2381.  
  2382. We were expected to talk about starting commercial part development
  2383. in the June Munic kitchen, when SOM wasn't there, embedding was a
  2384. black art, CFront was the only useable tool, ...
  2385. NO WAY! I think OpenDoc is a good idea, but it has to stabilize at
  2386. least SOMEWHAT, and the tools mess has to be sorted out before I
  2387. can spend time on business on it.
  2388.  
  2389. Cheers,
  2390.  
  2391.                     / h+
  2392.  
  2393. --
  2394.   Jon Wätte
  2395.   Hagagatan 1
  2396.   113 48 Stockholm
  2397.   Sweden
  2398.  
  2399.  
  2400. +++++++++++++++++++++++++++
  2401.  
  2402. >From d88-jwa@hemul.nada.kth.se (Jon Wätte)
  2403. Date: 25 Jul 1994 07:11:30 GMT
  2404. Organization: The Royal Institute of Technology
  2405.  
  2406. In <30u5jq$fvg@acmex.gatech.edu> gt7092d@prism.gatech.edu (Damir Smitlener) writes:
  2407.  
  2408. >looked at TransSkel, PowerPlant, etc. Compared even to Visual BASIC  
  2409. >they _suck_. 
  2410.  
  2411. Visual Basic is not in the same cathegory as PowerPlant or TCL.
  2412. Visual Basic is in the same cathegory as HyperCard 2.2 (which does
  2413. AppleScript as well)
  2414.  
  2415. >Until there is something like Visual C++ (if there is and i havent  
  2416. >seen it, please tell me! and i dont mean multi-thousand dollar 
  2417. >packages.), ile leave 'Mac' programming to those who want it. 
  2418.  
  2419. Why not pay a few thousand dollars for a good package? You paid
  2420. a lot for you Mac, you're going to earn your living with it, so
  2421. you'd better have decent tools, right?
  2422.  
  2423. As for a cheap tool, try Symantec C++ 7.0, which comes with an
  2424. interface builder (and the Think Class Library version 2.0) which
  2425. closely parallells Visual C++.
  2426.  
  2427. >All these defenses of mac-programming here confuse me; do you
  2428. >folks WANT to work that hard on non-essentials? Doesnt anyone
  2429.  
  2430. No; we DON'T work hard on essentials. Either we did it once
  2431. before, and copy/paste into a new project, or we use one of the
  2432. many good environments/frameworks available. But if you're the
  2433. typical lazy integrator consultant type, I'm not surprised you
  2434. don't want to do the research necessary before condemning a
  2435. platform you haven't used for any extended period of time.
  2436.  
  2437. -- 
  2438.  -- Jon W{tte, h+@nada.kth.se, Mac Software Engineer Deluxe --
  2439.  
  2440.    What we need is a good GNU [...] licence manager implementation.
  2441.                      -- Raphael Manfredi
  2442.  
  2443. +++++++++++++++++++++++++++
  2444.  
  2445. >From amundson@phenom.physics.wisc.edu (James F. Amundson)
  2446. Date: Mon, 25 Jul 1994 22:51:55 -0600
  2447. Organization: Division of Information Technology
  2448.  
  2449. In article <nagleCtCs2w.At9@netcom.com>, nagle@netcom.com (John Nagle) wrote:
  2450.  
  2451. >         There's also the "Nerdworks" library, which is a free class
  2452. > library available on Apple's "ftp.apple.com", and there's a book that
  2453. > goes with it.  This is a weak, but workable class library.
  2454.  
  2455. Hey! I'm interested in that! The problem is, I've looked all through
  2456. "ftp.apple.com" and found nothing. "dir-files-all" had no instances of
  2457. "nerd" or "works". Anyone care to point me to it?
  2458.  
  2459. Thanks,
  2460. Jim Amundson
  2461.  
  2462. +++++++++++++++++++++++++++
  2463.  
  2464. >From hpoppe@ncar.ucar.edu (Herb Poppe)
  2465. Date: 26 Jul 1994 15:40:23 GMT
  2466. Organization: National Center for Atmospheric Research
  2467.  
  2468. In article <amundson-2507942251550001@f181-079.net.wisc.edu>
  2469. amundson@phenom.physics.wisc.edu (James F. Amundson) writes:
  2470.  
  2471. > In article <nagleCtCs2w.At9@netcom.com>, nagle@netcom.com (John Nagle) wrote:
  2472. > >         There's also the "Nerdworks" library, which is a free class
  2473. > > library available on Apple's "ftp.apple.com", and there's a book that
  2474. > > goes with it.  This is a weak, but workable class library.
  2475. > Hey! I'm interested in that! The problem is, I've looked all through
  2476. > "ftp.apple.com" and found nothing. "dir-files-all" had no instances of
  2477. > "nerd" or "works". Anyone care to point me to it?
  2478.  
  2479. I couldn't find it either and I looked in directories other than /dts;
  2480. e.g., /pub. Is the "book that goes with it" in paper or electronic
  2481. form?
  2482.  
  2483.  
  2484. Herb Poppe             National Center for Atmospheric Research (NCAR)
  2485. hpoppe@ncar.ucar.edu   P.O. Box 3000
  2486. (303) 497-1296         Boulder, CO  80307  USA
  2487.  
  2488. +++++++++++++++++++++++++++
  2489.  
  2490. >From jpurlia@qualcomm.com (John Purlia)
  2491. Date: 26 Jul 1994 17:09:26 GMT
  2492. Organization: Qualcomm, Inc.
  2493.  
  2494. In article <30voj2$j37@news.kth.se>, d88-jwa@hemul.nada.kth.se (Jon Wätte)
  2495. wrote:
  2496.  
  2497. > In <30u5jq$fvg@acmex.gatech.edu> gt7092d@prism.gatech.edu (Damir
  2498. Smitlener) writes:
  2499. > >All these defenses of mac-programming here confuse me; do you
  2500. > >folks WANT to work that hard on non-essentials? Doesnt anyone
  2501. > No; we DON'T work hard on essentials. Either we did it once
  2502. > before, and copy/paste into a new project, or we use one of the
  2503. > many good environments/frameworks available. But if you're the
  2504. > typical lazy integrator consultant type, I'm not surprised you
  2505. > don't want to do the research necessary before condemning a
  2506. > platform you haven't used for any extended period of time.
  2507.  
  2508. Exactly!!  I have a standard "John's Generic App" I use to start off just
  2509. about every project I begin.  All the standard event handling code is
  2510. there for handling menus, updates, clicks, idle time, etc...  I wrote it
  2511. once and it takes all of a couple hours to plug in specifics for a new
  2512. project.  The time is spent doing it right the first time and I believe
  2513. EVERY Mac programmer should go through this exercise in order to comprhend
  2514. what goes on "behind the scenes".
  2515.  
  2516. Why?
  2517.  
  2518. Because this basic understanding is essential if you ever want to take
  2519. your applications beyond the basic elements provided by a framework.  What
  2520. if you need to implement some special user interface element not provided
  2521. by the framework, or want to be extra nice to your users and manage
  2522. updates within your windows by carefully considering how regions are
  2523. validated and invalidated so as to reduce unnecessary (read, ugly)
  2524. redrawing?  You'll be much better equipped to produce extra functionality
  2525. and refinement in your app's if you've taken the time -- once -- to build
  2526. your own basic application.  Toss in a liberal dose of attention to
  2527. c.s.m.p, develop, Inside Mac, Tech Notes and sample code snippets, and the
  2528. rest is cut'n'paste.
  2529.  
  2530. -- John
  2531.  
  2532. ...........................................................................
  2533. John Purlia          : My brain; not my company's brain.  My brain says...
  2534. jpurlia@qualcomm.com :
  2535. Applelink    AM0470  :   "Newton could never live on Via de la Valle,
  2536. NewtonMail:  JPurlia :  but it would be right at home on Cruel Lucille"
  2537.  
  2538. +++++++++++++++++++++++++++
  2539.  
  2540. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  2541. Date: Tue, 26 Jul 1994 22:07:34 GMT
  2542. Organization: Apple Computer
  2543.  
  2544.  Jon W!tte, h+@nada.kth.se writes:
  2545. > Why wasn't that [recipe] on the a6 source CD?
  2546.  
  2547. I said it was new! Joshua just finished writing it a few weeks ago.
  2548.  
  2549. > No; it's the easiest objection. I could go on about what compiling
  2550. > in CFront/MPW does to my productivity, but I won't :-)
  2551.  
  2552. We've switched to CodeWarrior/PPC for our development (although scpp should
  2553. still work.) Will that make you happy? ;-) Really, I hate MPW just as much as
  2554. you do, if not more.
  2555.  
  2556. > There's also this undefined thing called memory layout. What if
  2557. > you want to know how much memory you have to play with for
  2558. > caching issues
  2559.  
  2560. Well, that's really an issue with any memory scheme that doesn't fit you into
  2561. a predeclared partition size, i.e. almost any memory manager other than the
  2562. normal Mac one. Yes, it's a slightly different world. But the user will
  2563. appreciate not having to set partition sizes, esp. not for every individual
  2564. document! And it would really be infeasible to know how much memory any
  2565. particular document needed...
  2566.   Your part is free to use the Mac memory manager, by the way, as long as it
  2567. allocates stuff in temp memory.
  2568.  
  2569. > NO WAY! I think OpenDoc is a good idea, but it has to stabilize at
  2570. > least SOMEWHAT, and the tools mess has to be sorted out before I
  2571. > can spend time on business on it.
  2572.  
  2573. Well, that's the difference between alpha and beta. Alpha tends to be messier
  2574. and more unstable. On the other hand, if you start developing with alpha
  2575. software, you have more time to learn how the stuff works and more time to
  2576. write code. It's a trade-off anyone has to make. I hope you'll try out the
  2577. beta release when it ships (nope, I'm not allowed to make any statements
  2578. about schedule...)
  2579.  
  2580. --Jens Alfke
  2581.   jens_alfke@powertalk              Rebel girl, rebel girl,
  2582.             .apple.com              Rebel girl you are the queen of my world
  2583.  
  2584. +++++++++++++++++++++++++++
  2585.  
  2586. >From Mark Hanrek <hanrek@cts.com>
  2587. Date: Tue, 26 Jul 1994 21:12:04 GMT
  2588. Organization: The Information Workshop
  2589.  
  2590. >> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2591. >> Jens Alfke wrote:
  2592. >>
  2593. >> And, the OpenDoc Parts Framework will take
  2594. >> care of the grungy details of scrolling for you.
  2595. >>
  2596. >- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2597. > Jon W!tte writes:
  2598. >
  2599. > Any year now.
  2600. >
  2601. > We were expected to talk about starting commercial part development
  2602. > in the June Munic kitchen, when SOM wasn't there, embedding was a
  2603. > black art, CFront was the only useable tool, ...
  2604. >
  2605. > NO WAY! I think OpenDoc is a good idea, but it has to stabilize at
  2606. > least SOMEWHAT, and the tools mess has to be sorted out before I
  2607. > can spend time on business on it.
  2608. >
  2609.  
  2610. Jon,
  2611.  
  2612. >From your point of view, it seems you feel the OpenDoc team has made some
  2613. big mistakes.
  2614.  
  2615. >From my point of view, which is simply "one other point of view", I have
  2616. a high regard for the tough and appropriate choices the OpenDoc team has
  2617. made.  
  2618.  
  2619. Who's perspective is the more accurate one?
  2620.  
  2621.  
  2622. - --- The Answer
  2623.  
  2624. There IS a problem here, and it has a symptom, and it has a cause.
  2625.  
  2626. The SYMPTOM is the the inaccurate perception of something.
  2627.  
  2628. The CAUSE is the non-regard for the way in which information is handled.
  2629.  
  2630.  
  2631. - -- Pervasiveness
  2632.  
  2633. Jon, you are not to blame for your inaccurate assessment of the OpenDoc
  2634. development.  
  2635.  
  2636. You, along with all the rest of us, are not provided with the properly
  2637. sequenced information needed so that we CAN form an accurate perception,
  2638. or develop the skills to utilize that knowledge in an appropriate amount
  2639. of time.
  2640.  
  2641. And "OpenDoc" is no different than any other software subject.
  2642.  
  2643.  
  2644. - -- A Metaphor
  2645.  
  2646. It's almost as though all the "bits of knowledge" are just dropped into a
  2647. pile in the middle of the room, and if we REALLY want to participate, it
  2648. is up to us to just dive in and sort it all out.
  2649.  
  2650. But wait!  If I really want to be accurate here...
  2651.  
  2652. ... I must add that many, if not most, of those pieces only exist for a
  2653. short period of time, and disappear before you have a chance to grab 'em.
  2654.  
  2655. But that's okay. Fresh batches of new DIFFERENT pieces are continuously
  2656. dumped into that pile.
  2657.  
  2658. To be more accurate still...
  2659.  
  2660. ... there isn't just one pile, but there are at least 12 (at last count).
  2661.  Do you have access to all those piles?  You could spend a week chasing a
  2662. bug that was solved in one of those piles that you missed!
  2663.  
  2664.     Are we programmers, or must we be "pile-masters" as well?
  2665.  
  2666.  
  2667. - -- Action Items
  2668.  
  2669. The PROBLEM is so huge it is like an epidemic of cancer.
  2670.  
  2671. The SOLUTION is easily attainable.
  2672.  
  2673. We can't ignore this anymore.
  2674.  
  2675.  
  2676.  
  2677. Mark Hanrek
  2678. The Information Workshop
  2679.  
  2680. +++++++++++++++++++++++++++
  2681.  
  2682. >From ross@bnr.ca (Ross Brown)
  2683. Date: Wed, 27 Jul 1994 11:37:27 -0400
  2684. Organization: Bell-Northern Research
  2685.  
  2686. In article <CtKG85.4AK@crash.cts.com>, Mark Hanrek <hanrek@cts.com> wrote:
  2687.  
  2688. >     Are we programmers, or must we be "pile-masters" as well?
  2689.  
  2690. Apple's APIculture has turned us all into coder bees!  ;-)
  2691.  
  2692. -- 
  2693. Ross Brown
  2694. Macintosh/UNIX Systems Integration
  2695. Bell-Northern Research Ltd.
  2696. ross@bnr.ca
  2697.  
  2698. +++++++++++++++++++++++++++
  2699.  
  2700. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  2701. Date: Wed, 27 Jul 1994 21:13:03 GMT
  2702. Organization: Apple Computer
  2703.  
  2704. Mark Hanrek, hanrek@cts.com writes:
  2705. > You, along with all the rest of us, are not provided with the properly
  2706. > sequenced information needed so that we CAN form an accurate perception,
  2707. > or develop the skills to utilize that knowledge in an appropriate amount
  2708. > of time.
  2709.  
  2710. In all seriousness I'd like to ask what we [the OpenDoc team] could do
  2711. better. You have the architecture description, you have (preliminary) API
  2712. documentation and recipes, you have sample code, you have hours of WWDC
  2713. videos, you even have the full source code to all of OpenDoc. There is also a
  2714. mailing list (OpenDoc-Interest) where one can ask questions, which usually
  2715. get answered by the engineering team.
  2716.   Keep in mind that what you have is an _alpha_ release and is quite
  2717. preliminary. The documentation isn't really there yet, but Tech Pubs is in
  2718. high gear right now putting it together. The beta release will be better
  2719. documented; if you find that the effort needed to understand the alpha
  2720. release is not worth the benefit in early use of the software, then you can
  2721. wait for the beta release.
  2722.  
  2723. > The PROBLEM is so huge it is like an epidemic of cancer.
  2724. > The SOLUTION is easily attainable.
  2725.  
  2726. You titled this section "Action Items" but didn't provide any. If the
  2727. solution is easily attainable, what is it?? Again, I'm not being sarcastic...
  2728.  
  2729. --Jens Alfke
  2730.   jens_alfke@powertalk              Rebel girl, rebel girl,
  2731.             .apple.com              Rebel girl you are the queen of my world
  2732.  
  2733. ---------------------------
  2734.  
  2735. >From Ned Mantei <mantei@neuro.biol.ethz.ch>
  2736. Subject: What does "reentrant" mean?
  2737. Date: 19 Jul 1994 10:12:51 GMT
  2738. Organization: Neurobiology, ETH-Zurich
  2739.  
  2740. In view of the recent thread on "reentrancy and the Power Mac runtime
  2741. model", I would appreciate an explanation of the term "reentrant". 
  2742. Thanks.
  2743. Ned Mantei 
  2744. Dept. of Neurobiology , Swiss Federal Institute of Technology 
  2745. CH-8093 Zurich, Switzerland
  2746.  
  2747. +++++++++++++++++++++++++++
  2748.  
  2749. >From decartwr@newstand.syr.edu (Dana Cartwright 3rd)
  2750. Date: 19 Jul 1994 11:22:35 GMT
  2751. Organization: Syracuse University, Syracuse NY, USA
  2752.  
  2753. Ned Mantei (mantei@neuro.biol.ethz.ch) wrote:
  2754. : In view of the recent thread on "reentrancy and the Power Mac runtime
  2755. : model", I would appreciate an explanation of the term "reentrant".
  2756.  
  2757. Well, conceptually it's simple, although in practice it gets a bit more
  2758. complex.  "Reentrant" simply means "software which does not modify itself".
  2759. But read on....
  2760.  
  2761. Originally, computer software was NOT reentrant.  John von Neuman,
  2762. inventor of the "von Neuman" computer from which all modern computers
  2763. are descended, indeed thought that the essence of a computer was that
  2764. it could modify its own software on the fly, that is, to be a computer
  2765. meant that it *had* to have the capability of having self-modifying
  2766. code.
  2767.  
  2768. And the world bought into this notion.  It took DECADES to realize
  2769. that he was wrong (on this one point--he was a great man, but he
  2770. slipped slighly on this point). 
  2771.  
  2772. Modern programmers who only write application software may find the
  2773. concept of "reentrant" a bit puzzling; if you write in C and don't
  2774. do tricky things, you automatically and painlessly get reentrant
  2775. code.  Ditto all other languages above assembler.
  2776.  
  2777. But what get you in trouble are "store to memory" operations which
  2778. go directly to a fixed memory location.  For example, on the Mac,
  2779. all those lousy low-memory globals violate re-entrancy, if you
  2780. write to them.
  2781.  
  2782. What's the point of all this?  Well, reentrant software has the
  2783. property that you can (a) in effect run multiple copies of the 
  2784. software without actually having multiple copies sitting around;
  2785. all the "copies" can execute from a single master copy (since
  2786. it's read-only, everyone can read from the same copy), and     
  2787. (b) pre-emptive multi-tasking ONLY works with reentrant code.
  2788.  
  2789. OK, I'm tired of typing....there is much more which could be said,
  2790. but that's the gist of it.
  2791.  
  2792.  
  2793. +++++++++++++++++++++++++++
  2794.  
  2795. >From Gavin@UMich.EDU (Gavin Eadie)
  2796. Date: Tue, 19 Jul 1994 10:32:44 -0400
  2797. Organization: University of Michigan
  2798.  
  2799. In article <30gd1r$h44@newstand.syr.edu>, decartwr@newstand.syr.edu (Dana
  2800. Cartwright 3rd) wrote:
  2801.  
  2802. > Ned Mantei (mantei@neuro.biol.ethz.ch) wrote:
  2803. > : In view of the recent thread on "reentrancy and the Power Mac runtime
  2804. > : model", I would appreciate an explanation of the term "reentrant".
  2805. >  
  2806. > Well, conceptually it's simple, although in practice it gets a bit more
  2807. > complex.  "Reentrant" simply means "software which does not modify itself".
  2808. > But read on....
  2809. >  
  2810.    Strictly speaking, this is misleading because "software which does not
  2811. modify itself" is not necessarily reentrant.  The word 'reentrant' is the
  2812. clue - it is software which can be 'entered' again and again.  Imagine,
  2813. for example, a subroutine which performs some action and it is called by
  2814. some application.  While that subroutine is halfway done, and interrupt is
  2815. taken and the interrupt processing code also calls the subroutine.  For
  2816. this to cause no trouble the subroutine must be reentrant.  It's true that
  2817. if the subroutine modified itself this would, probably, cause trouble
  2818. (though self modification is possible in reentrant code if you're
  2819. careful); it's also the case that if the routine modified global
  2820. variables, that would cause trouble too.  But the real definition is only
  2821. that the routine can be entered multiple times 'simultaniously' and still
  2822. perform desired actions ... Gav
  2823.  
  2824. -- 
  2825. Gavin Eadie // U of Michigan Information Systems
  2826.  
  2827. +++++++++++++++++++++++++++
  2828.  
  2829. >From dubois@primate.wisc.edu (Paul DuBois)
  2830. Date: 19 Jul 1994 11:33:00 -0500
  2831. Organization: Castra Parvulorum
  2832.  
  2833. >From article <30g8v3$5a7@elna.ethz.ch>, by Ned Mantei <mantei@neuro.biol.ethz.ch>:
  2834. > In view of the recent thread on "reentrancy and the Power Mac runtime
  2835. > model", I would appreciate an explanation of the term "reentrant". 
  2836.  
  2837. It means you can use it twice before it crashes.
  2838. -- 
  2839. Paul DuBois
  2840. dubois@primate.wisc.edu
  2841.  
  2842. +++++++++++++++++++++++++++
  2843.  
  2844. >From resnick@uiuc.edu (Pete Resnick)
  2845. Date: Tue, 19 Jul 1994 15:14:10 -0500
  2846. Organization: University of Illinois at Urbana-Champaign
  2847.  
  2848. Dana's article is almost completely wrong.
  2849.  
  2850. In article <30gd1r$h44@newstand.syr.edu>, decartwr@newstand.syr.edu (Dana
  2851. Cartwright 3rd) wrote:
  2852.  
  2853. >Well, conceptually it's simple, although in practice it gets a bit more
  2854. >complex.  "Reentrant" simply means "software which does not modify itself".
  2855.  
  2856. No, reentrant only means "able to start execution while already executing
  2857. in another context". There can be self-modifying code that is reentrant,
  2858. and there can be non-reentrant code that is not self modifying. The
  2859. characterization that Dana presents is completely false.
  2860.  
  2861. >Originally, computer software was NOT reentrant.  John von Neuman
  2862. >[...]indeed thought that the essence of a computer was that
  2863. >it could modify its own software on the fly, that is, to be a computer
  2864. >meant that it *had* to have the capability of having self-modifying
  2865. >code.
  2866.  
  2867. Universal Turing machines are self-modifying. I don't thing von Neuman
  2868. came up with that. The key to a von Neuman machine is that *code is in
  2869. memory*.
  2870.  
  2871. >And the world bought into this notion.  It took DECADES to realize
  2872. >that he was wrong...
  2873.  
  2874. No! Do you think that every program should be in ROM?? The code of a
  2875. Macintosh is modified *every time* you open an application. Loading new
  2876. code into memory is modifying code. This is *EXACTLY* what we want
  2877. computers to do. Using pure ROM for code is completely outdated. There are
  2878. certain parts of code that we often don't want modified and so take
  2879. troubles to put in memory that is treated as temporarily unmodifiable, but
  2880. the world has not thought any the less of von Neuman machines in this
  2881. regard.
  2882.  
  2883. >Modern programmers who only write application software may find the
  2884. >concept of "reentrant" a bit puzzling; if you write in C and don't
  2885. >do tricky things, you automatically and painlessly get reentrant
  2886. >code.  Ditto all other languages above assembler.
  2887.  
  2888. Wrong again. Use the Time Manager on the Macintosh. Use the Device Manager
  2889. with completion routines. Then go and write some results to some memory in
  2890. a pointer which you allocated in your main loop. Now you are not reentrant
  2891. and you haven't done anything particularly "tricky". The key to reentrancy
  2892. is that you need to make sure your code can be called from somewhere else
  2893. even if it is already in the middle of running.
  2894.  
  2895. >But what get you in trouble are "store to memory" operations which
  2896. >go directly to a fixed memory location.  For example, on the Mac,
  2897. >all those lousy low-memory globals violate re-entrancy, if you
  2898. >write to them.
  2899.  
  2900. It's not just low-memory globals. It's any constant memory location that
  2901. your program has access to.
  2902.  
  2903. >What's the point of all this?  Well, reentrant software has the
  2904. >property that you can (a) in effect run multiple copies of the 
  2905. >software without actually having multiple copies sitting around;
  2906. >all the "copies" can execute from a single master copy (since
  2907. >it's read-only, everyone can read from the same copy
  2908.  
  2909. Again, being read-only doesn't make it reentrant.
  2910.  
  2911. >(b) pre-emptive multi-tasking ONLY works with reentrant code.
  2912.  
  2913. That's simply false. The operating system can perfectly well deal with
  2914. code that is not itself reentrant in a pre-emptive multi-tasking
  2915. environment.
  2916.  
  2917. pr
  2918. -- 
  2919. Pete Resnick        (...so what is a mojo, and why would one be rising?)
  2920. Doctoral Student - Philosophy Department, Gregory Hall, UIUC
  2921. System manager - Cognitive Science Group, Beckman Institute, UIUC
  2922. Internet: resnick@uiuc.edu
  2923.  
  2924. +++++++++++++++++++++++++++
  2925.  
  2926. >From coopem@panix.com (Marc Cooperman)
  2927. Date: 20 Jul 1994 01:41:37 GMT
  2928. Organization: Jumpstart Technologies, Inc.
  2929.  
  2930. The practical definition:
  2931.  
  2932. "re-entrant" routines can be called again and again from unforseen
  2933. places in your code, at unforseen times, and they won't break, like all
  2934. that other C code you've written
  2935.  
  2936. If you program linearly (you can trace a single execution path through your
  2937. code that does not double back on itself) you don't have to worry much
  2938. about
  2939. this
  2940.  
  2941. if you program event driven code (like, on a Mac, you know...) that's got
  2942. a million disgusting permutations to how it can run, you may have
  2943. "re-entrancy" problems, although it is possible to write safe code by
  2944. accident
  2945.  
  2946. A general rule - a re-entrant procedure should operate on its own copies of
  2947. data (automatic variables) wherever possible. If you must change a value
  2948. passed in by reference, you probably want to lock the code, to prevent it
  2949. from re-entering, before the changes are complete. Either that, or hold the
  2950. caller responsible for providing memory to store results and ensuring
  2951. proper calling sequence - never write to global variables within the
  2952. library!
  2953.  
  2954. +++++++++++++++++++++++++++
  2955.  
  2956. >From nagle@netcom.com (John Nagle)
  2957. Date: Wed, 20 Jul 1994 16:00:47 GMT
  2958. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  2959.  
  2960. decartwr@newstand.syr.edu (Dana Cartwright 3rd) writes:
  2961. >Ned Mantei (mantei@neuro.biol.ethz.ch) wrote:
  2962. >: In view of the recent thread on "reentrancy and the Power Mac runtime
  2963. >: model", I would appreciate an explanation of the term "reentrant".
  2964.  
  2965. >Originally, computer software was NOT reentrant.  John von Neuman,
  2966. >inventor of the "von Neuman" computer from which all modern computers
  2967. >are descended, indeed thought that the essence of a computer was that
  2968. >it could modify its own software on the fly, that is, to be a computer
  2969. >meant that it *had* to have the capability of having self-modifying
  2970. >code.
  2971. >And the world bought into this notion.  It took DECADES to realize
  2972. >that he was wrong (on this one point--he was a great man, but he
  2973. >slipped slighly on this point). 
  2974.  
  2975.        No, the "B-box", the first index register, was invented in
  2976. Britain in the mid-50s.  Before index registers, the only way to 
  2977. subscript an array was to store into the address part of instructions.
  2978. Once index registers were invented, most of the need to modify code
  2979. during execution went away.
  2980.  
  2981.        Once index registers were invented, the big remaining problem
  2982. was storing subroutine return points.  Using a stack fixed that one,
  2983. along with providing a separate set of local variables for each
  2984. invocation of a function.
  2985.  
  2986.        In C-type languages, functions that have no static variables
  2987. are generally reentrant.  It's sharing of resources between separate
  2988. invocations of the same function that breaks reentrancy.
  2989.  
  2990.                     John Nagle
  2991.  
  2992. +++++++++++++++++++++++++++
  2993.  
  2994. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  2995. Date: Wed, 20 Jul 1994 19:51:52 GMT
  2996. Organization: Apple Computer
  2997.  
  2998. Ned Mantei, mantei@neuro.biol.ethz.ch writes:
  2999. > In view of the recent thread on "reentrancy and the Power Mac runtime
  3000. > model", I would appreciate an explanation of the term "reentrant". 
  3001.  
  3002. "Re-entrant" means a call to a subroutine that is already executing. A
  3003. recursive call would be the most straightforward example. This could include
  3004. indirect recursion where A calls B, B calls C, and C calls A. You can also
  3005. get re-entrancy if a routine triggeredy by an interrupt calls a function that
  3006. was already executing when the interrupt occurred, or if a process-switch
  3007. happens while the function is executing and the next process to run also
  3008. calls that function.
  3009.  
  3010. Most of the Mac OS and Toolbox routines are not re-entrant; that is, they
  3011. will not work properly when called re-entrantly. This is why you can't call
  3012. Memory Manager routines from an interrupt (you might have interrupted a MM
  3013. routine, so the heap structures might be in an inconsistent state.) It's also
  3014. why you can't have multiple Standard File dialogs open at the same time (the
  3015. Std File package uses several low-memory globals, and two instances of it
  3016. would fight over those globals.)
  3017.  
  3018. This is one of the major things that has to be fixed with the OS for the
  3019. Copland and Gershwin releases.
  3020.  
  3021. --Jens Alfke
  3022.   jens_alfke@powertalk              Rebel girl, rebel girl,
  3023.             .apple.com              Rebel girl you are the queen of my world
  3024.  
  3025. +++++++++++++++++++++++++++
  3026.  
  3027. >From mem8321@u.cc.utah.edu (Mark Miller)
  3028. Date: 24 Jul 1994 17:21:36 -0600
  3029. Organization: University of Utah Computer Center, Salt Lake City, Ut.
  3030.  
  3031. In article <30gd1r$h44@newstand.syr.edu>,
  3032. Dana Cartwright 3rd <decartwr@newstand.syr.edu> wrote:
  3033. >Ned Mantei (mantei@neuro.biol.ethz.ch) wrote:
  3034. >: In view of the recent thread on "reentrancy and the Power Mac runtime
  3035. >: model", I would appreciate an explanation of the term "reentrant".
  3036. >Well, conceptually it's simple, although in practice it gets a bit more
  3037. >complex.  "Reentrant" simply means "software which does not modify itself".
  3038. >But read on....
  3039.  
  3040. For a program to be reentrant, it must satisfy one of the following
  3041. three conditions:
  3042.  
  3043. 1. Use no global variables
  3044. 2. Be programmed VERY carefully to account for a small number of shared
  3045.    globals.
  3046. 3. Be used with a linker / loader that creates a new global data segment
  3047.    for each instance of the program running.  Allowing each instance to
  3048.    use its own segment either requires referencing all global variables
  3049.    from a register base (A5?) or having different address spaces for each
  3050.    instance with an MMU.
  3051.  
  3052. Other than these conditions, and not using self-modifying code, reentrant
  3053. programs may do anything else that is legal under a multitasking
  3054. environment, including accessing shared system globals, as long as proper
  3055. resource locking and task switching procedures are followed.
  3056.  
  3057.   - Mark.
  3058.  
  3059. +++++++++++++++++++++++++++
  3060.  
  3061. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  3062. Date: 25 Jul 94 17:33:19 +1200
  3063. Organization: University of Waikato, Hamilton, New Zealand
  3064.  
  3065. In article <30gd1r$h44@newstand.syr.edu>, decartwr@newstand.syr.edu (Dana Cartwright 3rd) writes:
  3066. >
  3067. > Originally, computer software was NOT reentrant.  John von Neuman,
  3068. > inventor of the "von Neuman" computer from which all modern computers
  3069. > are descended, indeed thought that the essence of a computer was that
  3070. > it could modify its own software on the fly, that is, to be a computer
  3071. > meant that it *had* to have the capability of having self-modifying
  3072. > code.
  3073. >
  3074. > And the world bought into this notion.  It took DECADES to realize
  3075. > that he was wrong (on this one point--he was a great man, but he
  3076. > slipped slighly on this point).
  3077.  
  3078. No, he wasn't wrong. What happened is that certain people have chosen to
  3079. misunderstand the essence of his idea. "Self-modifying" code conjures up
  3080. visions of nasty low-level assembly hacks, and, yes, I've seen a few in my time.
  3081. But a better concept is "generating code at run-time". As soon as you put
  3082. it this way, you start to see that there isn't anything inherently evil about
  3083. it. It's a neat technique, quite easy to use in a controlled way from a high-
  3084. level language, and on the Mac in particular, it solves a whole class of very
  3085. fiddly problems (passing data to callback/completion routines etc) in one
  3086. stroke.
  3087.  
  3088. Lawrence
  3089. driving on the left of the Information Superhighway
  3090.  
  3091. +++++++++++++++++++++++++++
  3092.  
  3093. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  3094. Date: 25 Jul 94 17:47:07 +1200
  3095. Organization: University of Waikato, Hamilton, New Zealand
  3096.  
  3097. In article <30ut20$ql@u.cc.utah.edu>, mem8321@u.cc.utah.edu (Mark Miller) writes:
  3098. >
  3099. > For a program to be reentrant, it must satisfy one of the following
  3100. > three conditions:
  3101. >
  3102. > 1. Use no global variables
  3103.  
  3104. And what, pray tell, are the CPU registers, if not global variables?
  3105.  
  3106. > 2. Be programmed VERY carefully to account for a small number of shared
  3107. >    globals.
  3108.  
  3109. Ah, you contradict point 1, which is just as well. The operative word is not
  3110. "small". The operative word is "consistency". Consider the entire RAM of your
  3111. machine. Consider the entire file system on your hard disk. These constitute
  3112. large collections of global data, being operated on by dozens, nay, hundreds
  3113. of concurrent processes running in your machine all at the same time. How do
  3114. you think they avoid stuffing each other up? There are various techniques in
  3115. use:
  3116.  
  3117. * Demarcation of responsibility. Not every process needs access to every bit
  3118. of data at the same time.
  3119. * Interlocks for those cases where two processes _do_ need access to the same
  3120. bit of data at the same time.
  3121.  
  3122. By obeying a few carefully-chosen conventions, you can manage reentrant access
  3123. to an arbitrarily large amount of shared global data.
  3124.  
  3125. > 3. Be used with a linker / loader that creates a new global data segment
  3126. >    for each instance of the program running.  Allowing each instance to
  3127. >    use its own segment either requires referencing all global variables
  3128. >    from a register base (A5?) or having different address spaces for each
  3129. >    instance with an MMU.
  3130.  
  3131. There is an alternative approach, typified by VAX/VMS. Most code under VMS
  3132. is reentrant. This particularly includes shared libraries. User programs can
  3133. have any number of shared libraries linked into them, and a library can't
  3134. depend on occupying the same address space in one program invocation as in
  3135. another. The VAX has no base registers, like A5 on the Mac, or like I understand
  3136. the PowerPC architecture has. So all that's guaranteed is that each library
  3137. maps into its own contiguous section of memory space. Its code and data are
  3138. adjacent to each other, so providing all intra-library references use relative
  3139. addressing, things continue to work.
  3140.  
  3141. Of course, inter-library references are a different matter. This is handled
  3142. by adding a "fixup" section to the library: all code references to other
  3143. libraries go indirect via the fixup section, and there is also a table of
  3144. references within library data structures which need fixing up.
  3145.  
  3146. Lawrence
  3147. chuffing along the Information Railroad (if you think that's less cool than
  3148. tooling along the Information Superhighway, just wait until the next level
  3149. crossing).
  3150.  
  3151. +++++++++++++++++++++++++++
  3152.  
  3153. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  3154. Date: Tue, 26 Jul 1994 11:20:05 +0800
  3155. Organization: Department of Computer Science, The University of Western Australia
  3156.  
  3157. In article <1994Jul25.173319.31386@waikato.ac.nz>, ldo@waikato.ac.nz
  3158. (Lawrence D'Oliveiro, Waikato University) wrote:
  3159.  
  3160. >No, he wasn't wrong. What happened is that certain people have chosen to
  3161. >misunderstand the essence of his idea. "Self-modifying" code conjures up
  3162. >visions of nasty low-level assembly hacks, and, yes, I've seen a few in my
  3163. >time.
  3164.  
  3165. Hey, I've perpertrated a few "nasty low-level assembly hacks" in my time (:
  3166. -- 
  3167. Quinn "The Eskimo!"      <quinn@cs.uwa.edu.au>     "Support HAVOC!"
  3168. Department of Computer Science, The University of Western Australia
  3169.   But the nastiest one ever was the self-modifying Pascal under CP/M (: 
  3170.  
  3171. ---------------------------
  3172.  
  3173. End of C.S.M.P. Digest
  3174. **********************
  3175.  
  3176.  
  3177.  
  3178.